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
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);
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)
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);