Commit 232d4b01 authored by Sage Weil's avatar Sage Weil

ceph: move directory size logic to ceph_getattr

We can't fill i_size with rbytes at the fill_file_size stage without
adding additional checks for directories.  Notably, we want st_blocks
to remain 0 on directories so that 'du' still works.

Fill in i_blocks, i_size specially in ceph_getattr instead.
Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent bb097ffa
...@@ -568,8 +568,6 @@ static int fill_inode(struct inode *inode, ...@@ -568,8 +568,6 @@ static int fill_inode(struct inode *inode,
queue_trunc = ceph_fill_file_size(inode, issued, queue_trunc = ceph_fill_file_size(inode, issued,
le32_to_cpu(info->truncate_seq), le32_to_cpu(info->truncate_seq),
le64_to_cpu(info->truncate_size), le64_to_cpu(info->truncate_size),
S_ISDIR(inode->i_mode) ?
ci->i_rbytes :
le64_to_cpu(info->size)); le64_to_cpu(info->size));
ceph_fill_file_time(inode, issued, ceph_fill_file_time(inode, issued,
le32_to_cpu(info->time_warp_seq), le32_to_cpu(info->time_warp_seq),
...@@ -1603,6 +1601,7 @@ int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry, ...@@ -1603,6 +1601,7 @@ int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry,
struct kstat *stat) struct kstat *stat)
{ {
struct inode *inode = dentry->d_inode; struct inode *inode = dentry->d_inode;
struct ceph_inode_info *ci = ceph_inode(inode);
int err; int err;
err = ceph_do_getattr(inode, CEPH_STAT_CAP_INODE_ALL); err = ceph_do_getattr(inode, CEPH_STAT_CAP_INODE_ALL);
...@@ -1613,8 +1612,11 @@ int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry, ...@@ -1613,8 +1612,11 @@ int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry,
stat->dev = ceph_snap(inode); stat->dev = ceph_snap(inode);
else else
stat->dev = 0; stat->dev = 0;
if (S_ISDIR(inode->i_mode)) if (S_ISDIR(inode->i_mode)) {
stat->size = ci->i_rbytes;
stat->blocks = 0;
stat->blksize = 65536; stat->blksize = 65536;
}
} }
return err; return err;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment