Whamcloud - gitweb
remove unused variable
[fs/lustre-release.git] / lustre / smfs / file.c
index c0d8842..d7806bb 100644 (file)
@@ -62,33 +62,20 @@ static ssize_t smfs_write(struct file *filp, const char *buf, size_t count,
         LASSERT(cache_inode->i_fop->write);
 
         sfi = F2SMFI(filp);
-
-        if (sfi->magic != SMFS_FILE_MAGIC) 
-                LBUG();
+        LASSERT(sfi->magic == SMFS_FILE_MAGIC);
 
         if (filp->f_flags & O_APPEND)
                 msg.pos = filp->f_dentry->d_inode->i_size;
         
-        pre_smfs_inode(filp->f_dentry->d_inode, cache_inode);
-
+        pre_smfs_file(filp, &msg.pos, &cache_ppos);
         SMFS_PRE_HOOK(filp->f_dentry->d_inode, HOOK_WRITE, &msg);
 
-        if (ppos != &(filp->f_pos)) {
-                cache_ppos = &msg.pos;
-        } else {
-                cache_ppos = &sfi->c_file->f_pos;
-        }
-        
-        *cache_ppos = *ppos;
-
         rc = cache_inode->i_fop->write(sfi->c_file, buf, count,
                                        cache_ppos);
         
         SMFS_POST_HOOK(filp->f_dentry->d_inode, HOOK_WRITE, &msg, rc);
-        
-        post_smfs_inode(filp->f_dentry->d_inode, cache_inode);
+        post_smfs_file(filp);
         *ppos = *cache_ppos;
-        duplicate_file(filp, sfi->c_file);
         
         RETURN(rc);
 }
@@ -110,7 +97,7 @@ int smfs_ioctl(struct inode * inode, struct file * filp,
                 LBUG();
 
         pre_smfs_inode(inode, cache_inode);
-
+        
         rc = cache_inode->i_fop->ioctl(cache_inode, sfi->c_file, cmd, arg);
         
         post_smfs_inode(inode, cache_inode);
@@ -124,7 +111,6 @@ static ssize_t smfs_read(struct file *filp, char *buf,
 {
         struct  inode *cache_inode = I2CI(filp->f_dentry->d_inode);
         struct  smfs_file_info *sfi;
-        loff_t  tmp_ppos;
         loff_t  *cache_ppos = NULL;
         ssize_t rc = 0;
 
@@ -137,21 +123,10 @@ static ssize_t smfs_read(struct file *filp, char *buf,
         if (sfi->magic != SMFS_FILE_MAGIC) 
                 LBUG();
 
-        if (ppos != &(filp->f_pos)) {
-                cache_ppos = &tmp_ppos;
-        } else {
-                cache_ppos = &sfi->c_file->f_pos;
-        }
-        *cache_ppos = *ppos;
-
-        pre_smfs_inode(filp->f_dentry->d_inode, cache_inode);
-
+        pre_smfs_file(filp, ppos, &cache_ppos);
         rc = cache_inode->i_fop->read(sfi->c_file, buf, count, cache_ppos);
+        post_smfs_file(filp);
         
-        *ppos = *cache_ppos;
-        post_smfs_inode(filp->f_dentry->d_inode, cache_inode);
-        duplicate_file(filp, sfi->c_file);
-
         RETURN(rc);
 }
 
@@ -392,9 +367,9 @@ int smfs_setattr(struct dentry *dentry, struct iattr *attr)
         struct dentry *cache_dentry;
         void  *handle = NULL;
         int rc = 0;
-        struct hook_setattr_msg msg = {
+        struct hook_attr_msg msg = {
                 .dentry = dentry,
-                .attr = attr
+                .attr = attr,
         };
 
         ENTRY;
@@ -427,11 +402,14 @@ exit:
         RETURN(rc);
 }
 
-int smfs_setxattr(struct dentry *dentry, const char *name, const void *value,
-                  size_t size, int flags)
+int smfs_setxattr(struct dentry *dentry, const char *name,
+                  const void *value, size_t size, int flags)
 {
         struct inode *cache_inode = I2CI(dentry->d_inode);
         struct dentry *cache_dentry = NULL;
+        struct hook_xattr_msg msg = {
+                .name = (char*)name,
+        };
         int rc = 0;
 
         ENTRY;
@@ -444,9 +422,12 @@ int smfs_setxattr(struct dentry *dentry, const char *name, const void *value,
                 RETURN(-ENOMEM);
 
         pre_smfs_inode(dentry->d_inode, cache_inode);
+        SMFS_PRE_HOOK(dentry->d_inode, HOOK_SETXATTR, &msg); 
 
         rc = cache_inode->i_op->setxattr(cache_dentry, name, value,
                                          size, flags);
+        
+        SMFS_POST_HOOK(dentry->d_inode, HOOK_SETXATTR, &msg, rc);
 
         post_smfs_inode(dentry->d_inode, cache_inode);
         post_smfs_dentry(cache_dentry);
@@ -454,11 +435,14 @@ int smfs_setxattr(struct dentry *dentry, const char *name, const void *value,
         RETURN(rc);
 }
 
-int smfs_getxattr(struct dentry *dentry, const char *name, void *buffer,
-                  size_t size)
+int smfs_getxattr(struct dentry *dentry, const char *name,
+                  void *buffer, size_t size)
 {
         struct inode *cache_inode = I2CI(dentry->d_inode);
         struct dentry *cache_dentry;
+        struct hook_xattr_msg msg = {
+                .name = (char*)name,
+        };
         int rc = 0;
 
         ENTRY;
@@ -471,10 +455,10 @@ int smfs_getxattr(struct dentry *dentry, const char *name, void *buffer,
                 RETURN(-ENOMEM);
 
         pre_smfs_inode(dentry->d_inode, cache_inode);
-
+        SMFS_PRE_HOOK(dentry->d_inode, HOOK_GETXATTR, &msg);
         rc = cache_inode->i_op->getxattr(cache_dentry, name, buffer,
                                          size);
-
+        SMFS_POST_HOOK(dentry->d_inode, HOOK_GETXATTR, &msg, rc);
         post_smfs_inode(dentry->d_inode, cache_inode);
         post_smfs_dentry(cache_dentry);
 
@@ -486,7 +470,10 @@ ssize_t smfs_listxattr(struct dentry *dentry, char *buffer, size_t size)
         struct inode *cache_inode = I2CI(dentry->d_inode);
         struct dentry *cache_dentry;
         int rc = 0;
-
+        struct hook_xattr_msg msg = {
+                .name = NULL,
+        };
+        
         ENTRY;
         
         LASSERT(cache_inode);
@@ -497,9 +484,11 @@ ssize_t smfs_listxattr(struct dentry *dentry, char *buffer, size_t size)
                 RETURN(-ENOMEM);
 
         pre_smfs_inode(dentry->d_inode, cache_inode);
+        SMFS_PRE_HOOK(dentry->d_inode, HOOK_LISTXATTR, &msg);
 
         rc = cache_inode->i_op->listxattr(cache_dentry, buffer, size);
 
+        SMFS_POST_HOOK(dentry->d_inode, HOOK_LISTXATTR, &msg, rc);
         post_smfs_inode(dentry->d_inode, cache_inode);
         post_smfs_dentry(cache_dentry);
 
@@ -511,7 +500,9 @@ int smfs_removexattr(struct dentry *dentry, const char *name)
         struct inode *cache_inode = I2CI(dentry->d_inode);
         struct dentry *cache_dentry;
         int rc = 0;
-
+        struct hook_xattr_msg msg = {
+                .name = (char*)name,
+        };
         ENTRY;
         
         LASSERT(cache_inode);
@@ -522,21 +513,52 @@ int smfs_removexattr(struct dentry *dentry, const char *name)
                 RETURN(-ENOMEM);
 
         pre_smfs_inode(dentry->d_inode, cache_inode);
+        SMFS_PRE_HOOK(dentry->d_inode, HOOK_REMOVEXATTR, &msg);
 
         rc = cache_inode->i_op->removexattr(cache_dentry, name);
 
+        SMFS_POST_HOOK(dentry->d_inode, HOOK_REMOVEXATTR, &msg, rc);
         post_smfs_inode(dentry->d_inode, cache_inode);
         post_smfs_dentry(cache_dentry);
 
         RETURN(rc);
 }
 
+int smfs_permission(struct inode *inode, int mask, struct nameidata *nd)
+{
+        struct inode *cache_inode = I2CI(inode);
+        int rc = 0;
+
+        ENTRY;
+        
+        LASSERT(cache_inode);
+        LASSERT(cache_inode->i_op->permission);
+
+        pre_smfs_inode(inode, cache_inode);
+
+        rc = cache_inode->i_op->permission(cache_inode, mask, nd);
+
+        post_smfs_inode(inode, cache_inode);
+
+        RETURN(rc);
+}
+
 struct inode_operations smfs_file_iops = {
         .truncate       = smfs_truncate,          /* BKL held */
         .setattr        = smfs_setattr,           /* BKL held */
-        .setxattr       = smfs_setxattr,          /* BKL held */
-        .getxattr       = smfs_getxattr,          /* BKL held */
-        .listxattr      = smfs_listxattr,         /* BKL held */
-        .removexattr    = smfs_removexattr,       /* BKL held */
+        .setxattr       = smfs_setxattr,
+        .getxattr       = smfs_getxattr,
+        .listxattr      = smfs_listxattr,
+        .removexattr    = smfs_removexattr,
+        .permission     = smfs_permission,
+};
+
+struct inode_operations smfs_special_iops = {
+        .setattr        = smfs_setattr,           /* BKL held */
+        .setxattr       = smfs_setxattr,
+        .getxattr       = smfs_getxattr,
+        .listxattr      = smfs_listxattr,
+        .removexattr    = smfs_removexattr,
+        .permission     = smfs_permission,
 };