diff options
author | Yan, Zheng <zyan@redhat.com> | 2016-02-26 17:16:32 +0800 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2016-03-25 18:51:53 +0100 |
commit | a3d714c33632ef6bfdfaacc74ae6ba297b4c5820 (patch) | |
tree | c06a6b4821ea6f974b33d7e87e9aa952608e936a /fs/ceph/inode.c | |
parent | af5e5eb574776cdf1b756a27cc437bff257e22fe (diff) | |
download | lwn-a3d714c33632ef6bfdfaacc74ae6ba297b4c5820.tar.gz lwn-a3d714c33632ef6bfdfaacc74ae6ba297b4c5820.zip |
ceph: avoid updating directory inode's i_size accidentally
Directory inode's i_size is used by readdir cache.
Signed-off-by: Yan, Zheng <zyan@redhat.com>
Diffstat (limited to 'fs/ceph/inode.c')
-rw-r--r-- | fs/ceph/inode.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 495decfc4b34..66edef12c6f2 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -549,6 +549,10 @@ int ceph_fill_file_size(struct inode *inode, int issued, if (ceph_seq_cmp(truncate_seq, ci->i_truncate_seq) > 0 || (truncate_seq == ci->i_truncate_seq && size > inode->i_size)) { dout("size %lld -> %llu\n", inode->i_size, size); + if (size > 0 && S_ISDIR(inode->i_mode)) { + pr_err("fill_file_size non-zero size for directory\n"); + size = 0; + } i_size_write(inode, size); inode->i_blocks = (size + (1<<9) - 1) >> 9; ci->i_reported_size = size; |