From e4d86f3163d5d5b069c8af1f80e5924d48a249ee Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Tue, 5 Oct 2010 09:25:38 -0700 Subject: [PATCH] client: Fix truncate_seq/truncate_length initialization. Initializing to 0 was causing file_to_extents to get called on every inode since the MDS initializes truncate_seq to 1 and truncate_length to -1. This revealed itself as a crash on directory inodes, which have their layouts zeroed since merging the file_layouts branch. To make clearer, assert that anything being truncated is a file inode. --- src/client/Client.cc | 1 + src/client/Client.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index bd64a6b21be4a..31750940dc09a 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -375,6 +375,7 @@ void Client::update_inode_file_bits(Inode *in, in->truncate_size != truncate_size) { dout(10) << "truncate_size " << in->truncate_size << " -> " << truncate_size << dendl; + assert(in->is_file()); in->truncate_size = truncate_size; in->oset.truncate_size = truncate_size; if (g_conf.client_oc) { //do actual truncation diff --git a/src/client/Client.h b/src/client/Client.h index b173a803aed85..87acba55f022e 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -513,7 +513,7 @@ class Inode { Inode(vinodeno_t vino, ceph_file_layout *layout) : ino(vino.ino), snapid(vino.snapid), - rdev(0), mode(0), uid(0), gid(0), nlink(0), size(0), truncate_seq(0), truncate_size(0), + rdev(0), mode(0), uid(0), gid(0), nlink(0), size(0), truncate_seq(1), truncate_size(-1), time_warp_seq(0), max_size(0), version(0), xattr_version(0), flags(0), dir_hashed(false), dir_replicated(false), auth_cap(NULL), -- 2.39.5