Whamcloud - gitweb
- b_size_on_mds landed on HEAD:
[fs/lustre-release.git] / lustre / smfs / fsfilt.c
index ceb6a63..7dbfd03 100644 (file)
@@ -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);