summaryrefslogtreecommitdiff
path: root/src/mds/Locker.cc
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-10-11 15:13:22 +0800
committerYan, Zheng <zheng.z.yan@intel.com>2013-10-11 17:13:11 +0800
commiteb381ffc8db14f13a7c5e3528a109bf89a7c5b31 (patch)
treebbbcb291d6419ae533239f3d8ae549fd811ff8bf /src/mds/Locker.cc
parentcb9ebd6f363fb571ecb770eab9ab1313cb407108 (diff)
downloadceph-wip-filerecover.tar.gz
mds: don't decrease file size when recovering filewip-filerecover
Otherwise we may truncate sparse file to wrong size Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Diffstat (limited to 'src/mds/Locker.cc')
-rw-r--r--src/mds/Locker.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc
index 19c9176f414..7f852519714 100644
--- a/src/mds/Locker.cc
+++ b/src/mds/Locker.cc
@@ -2042,10 +2042,15 @@ bool Locker::check_inode_max_size(CInode *in, bool force_wrlock,
inode_t *latest = in->get_projected_inode();
map<client_t, client_writeable_range_t> new_ranges;
uint64_t size = latest->size;
- if (update_size)
- size = new_size;
bool new_max = update_max;
+ if (update_size) {
+ new_size = size = MAX(size, new_size);
+ new_mtime = MAX(new_mtime, latest->mtime);
+ if (latest->size == new_size && latest->mtime == new_mtime)
+ update_size = false;
+ }
+
uint64_t client_range_size = update_max ? new_max_size : size;
calc_new_client_ranges(in, client_range_size, new_ranges);