diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2023-03-02 21:48:30 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2023-03-02 21:48:30 +0300 |
commit | c3f9b9fa10b9fb677966bfdab8c00da739c4af1b (patch) | |
tree | befc276de29e056da62fba388f095baca49df6b4 /fs/ceph/file.c | |
parent | 04a357b1f6f0b6f7c8689361fa8802e8e35d02ad (diff) | |
parent | f7c4d9b133c7a04ca619355574e96b6abf209fba (diff) | |
download | linux-c3f9b9fa10b9fb677966bfdab8c00da739c4af1b.tar.xz |
Merge tag 'ceph-for-6.3-rc1' of https://github.com/ceph/ceph-client
Pull ceph fixes from Ilya Dryomov:
"Two small fixes from Xiubo and myself, marked for stable"
* tag 'ceph-for-6.3-rc1' of https://github.com/ceph/ceph-client:
rbd: avoid use-after-free in do_rbd_add() when rbd_dev_create() fails
ceph: update the time stamps and try to drop the suid/sgid
Diffstat (limited to 'fs/ceph/file.c')
-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 5dcc62e678c4..f4d8bf7dec88 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c @@ -2098,6 +2098,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; @@ -2132,6 +2135,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); @@ -2147,6 +2154,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); |