From: Yan, Zheng Date: Fri, 26 Feb 2016 09:16:32 +0000 (+0800) Subject: ceph: avoid updating directory inode's i_size accidentally X-Git-Tag: v4.6-rc1~1^2~9 X-Git-Url: https://git.kernel.dk/?p=linux-2.6-block.git;a=commitdiff_plain;h=a3d714c33632ef6bfdfaacc74ae6ba297b4c5820 ceph: avoid updating directory inode's i_size accidentally Directory inode's i_size is used by readdir cache. Signed-off-by: Yan, Zheng --- 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;