diff options
Diffstat (limited to 'src/mds/Locker.cc')
-rw-r--r-- | src/mds/Locker.cc | 9 |
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); |