X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fsmfs%2Ffsfilt.c;h=7dbfd037fbeaf0e041aaa94aa3d0b67aebb026c8;hb=7ae5cccbba7d48b45e43131ca56c86b63f0d2e0a;hp=ceb6a634fde0833eafb7a4a4fe1b63273d326478;hpb=d0d9cf25e48b14377f2de2d99d18c17cf113a3c2;p=fs%2Flustre-release.git diff --git a/lustre/smfs/fsfilt.c b/lustre/smfs/fsfilt.c index ceb6a63..7dbfd03 100644 --- a/lustre/smfs/fsfilt.c +++ b/lustre/smfs/fsfilt.c @@ -653,6 +653,7 @@ static int fsfilt_smfs_setattr(struct dentry *dentry, void *handle, struct fsfilt_operations *cache_fsfilt = I2FOPS(dentry->d_inode); struct dentry *cache_dentry = NULL; struct inode *cache_inode = I2CI(dentry->d_inode); + struct smfs_super_info *sbi = S2SMI(dentry->d_inode->i_sb); struct hook_setattr_msg msg = { .dentry = dentry, .attr = iattr @@ -673,6 +674,11 @@ static int fsfilt_smfs_setattr(struct dentry *dentry, void *handle, SMFS_PRE_HOOK(dentry->d_inode, HOOK_F_SETATTR, &msg); + if (SMFS_DO_HND_IBLOCKS(sbi)) { + /* size-on-mds changes i_blocks directly to reflect + * aggregated i_blocks from all OSTs -bzzz */ + cache_inode->i_blocks = dentry->d_inode->i_blocks; + } rc = cache_fsfilt->fs_setattr(cache_dentry, handle, iattr, do_trunc); SMFS_POST_HOOK(dentry->d_inode, HOOK_F_SETATTR, &msg, rc); @@ -681,14 +687,19 @@ static int fsfilt_smfs_setattr(struct dentry *dentry, void *handle, post_smfs_dentry(cache_dentry); RETURN(rc); } - static int fsfilt_smfs_set_xattr(struct inode *inode, void *handle, char *name, void *buffer, int buffer_size) { struct fsfilt_operations *cache_fsfilt = I2FOPS(inode); struct inode *cache_inode = NULL; + struct hook_setxattr_msg msg = { + .inode = inode, + .name = name, + .buffer = buffer, + .buffer_size = buffer_size + }; int rc = -EIO; - + ENTRY; if (!cache_fsfilt) @@ -697,12 +708,15 @@ static int fsfilt_smfs_set_xattr(struct inode *inode, void *handle, char *name, cache_inode = I2CI(inode); if (!cache_inode) RETURN(rc); - + pre_smfs_inode(inode, cache_inode); + SMFS_PRE_HOOK(inode, HOOK_F_SETXATTR, &msg); if (cache_fsfilt->fs_set_xattr) rc = cache_fsfilt->fs_set_xattr(cache_inode, handle, name, buffer, buffer_size); + + SMFS_POST_HOOK(inode, HOOK_F_SETXATTR, &msg, rc); post_smfs_inode(inode, cache_inode); RETURN(rc);