diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ceph/file.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c index b5cff85925a1..dc39a4b0ec8e 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c @@ -2102,6 +2102,9 @@ static long ceph_fallocate(struct file *file, int mode, loff_t endoff = 0; loff_t size; + dout("%s %p %llx.%llx mode %x, offset %llu length %llu\n", __func__, + inode, ceph_vinop(inode), mode, offset, length); + if (mode != (FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE)) return -EOPNOTSUPP; @@ -2136,6 +2139,10 @@ static long ceph_fallocate(struct file *file, int mode, if (ret < 0) goto unlock; + ret = file_modified(file); + if (ret) + goto put_caps; + filemap_invalidate_lock(inode->i_mapping); ceph_fscache_invalidate(inode, false); ceph_zero_pagecache_range(inode, offset, length); @@ -2151,6 +2158,7 @@ static long ceph_fallocate(struct file *file, int mode, } filemap_invalidate_unlock(inode->i_mapping); +put_caps: ceph_put_cap_refs(ci, got); unlock: inode_unlock(inode); |