Whamcloud - gitweb
1.2.8 and 1.4.0 did not have build/ tagged for them, so pull HEAD
[fs/lustre-release.git] / lustre / smfs / fsfilt.c
index 752085e..a4cf04c 100644 (file)
@@ -266,7 +266,6 @@ static ssize_t fsfilt_smfs_readpage(struct file *file, char *buf,
         struct fsfilt_operations *cache_fsfilt;
         struct smfs_file_info *sfi;
         struct inode *cache_inode;
-        loff_t tmp_ppos;
         loff_t *cache_ppos;
         ssize_t rc = -EIO;
         struct hook_msg msg = {
@@ -287,13 +286,7 @@ static ssize_t fsfilt_smfs_readpage(struct file *file, char *buf,
         if (sfi->magic != SMFS_FILE_MAGIC)
                 BUG();
 
-        if (off != &(file->f_pos))
-                cache_ppos = &tmp_ppos;
-        else
-                cache_ppos = &sfi->c_file->f_pos;
-        *cache_ppos = *off;
-
-        pre_smfs_inode(file->f_dentry->d_inode, cache_inode);
+        pre_smfs_file(file, off, &cache_ppos);
         SMFS_PRE_HOOK(file->f_dentry->d_inode, HOOK_READDIR, &msg);
 
 #if CONFIG_SNAPFS
@@ -318,10 +311,8 @@ static ssize_t fsfilt_smfs_readpage(struct file *file, char *buf,
 
 #endif
         SMFS_POST_HOOK(file->f_dentry->d_inode, HOOK_READDIR, &msg, rc);
-        *off = *cache_ppos;
-        post_smfs_inode(file->f_dentry->d_inode, cache_inode);
-        duplicate_file(file, sfi->c_file);
-
+        post_smfs_file(file);
+        
         RETURN(rc);
 }
 
@@ -387,13 +378,13 @@ int fsfilt_smfs_map_inode_pages(struct inode *inode, struct page **page,
         struct  fsfilt_operations *cache_fsfilt = I2FOPS(inode);
         struct  inode *cache_inode = NULL;
         int     rc = -EIO;
-        /*
         struct hook_rw_msg  msg = {
                 .write = create,
         };
-        */
+        hook_op hook = create ? HOOK_WRITE : HOOK_READ;
         ENTRY;
         
+        
         if (!cache_fsfilt)
                 RETURN(-EINVAL);
 
@@ -405,13 +396,13 @@ int fsfilt_smfs_map_inode_pages(struct inode *inode, struct page **page,
         if (!cache_fsfilt->fs_map_inode_pages)
                 RETURN(-ENOSYS);
 
+        SMFS_PRE_HOOK(inode, hook, &msg);
         down(&cache_inode->i_sem);
-        //SMFS_PRE_HOOK(inode, HOOK_MAP_PAGES, &msg);
 
         rc = cache_fsfilt->fs_map_inode_pages(cache_inode, page, pages, blocks,
                                               created, create, sem);
-
         up(&cache_inode->i_sem);
+        SMFS_POST_HOOK(inode, hook, &msg, rc);
 
         RETURN(rc);
 }
@@ -448,7 +439,6 @@ static int fsfilt_smfs_read_record(struct file * file, void *buf,
         struct  fsfilt_operations *cache_fsfilt;
         struct  inode *cache_inode;
         struct  smfs_file_info *sfi;
-        loff_t  tmp_ppos;
         loff_t  *cache_ppos;
         ssize_t rc;
 
@@ -458,29 +448,18 @@ static int fsfilt_smfs_read_record(struct file * file, void *buf,
                 RETURN(-EINVAL);
 
         cache_inode = I2CI(file->f_dentry->d_inode);
-
         if (!cache_inode)
                 RETURN(-EINVAL);
 
         sfi = F2SMFI(file);
-        if (sfi->magic != SMFS_FILE_MAGIC) BUG();
-
-        if (offs != &(file->f_pos))
-                cache_ppos = &tmp_ppos;
-        else
-                cache_ppos = &sfi->c_file->f_pos;
-        *cache_ppos = *offs;
-
-        pre_smfs_inode(file->f_dentry->d_inode, cache_inode);
+        LASSERT(sfi->magic == SMFS_FILE_MAGIC);
 
         if (!cache_fsfilt->fs_read_record)
                 RETURN(-ENOSYS);
 
+        pre_smfs_file(file, offs, &cache_ppos);
         rc = cache_fsfilt->fs_read_record(sfi->c_file, buf, size, cache_ppos);
-
-        *offs = *cache_ppos;
-        post_smfs_inode(file->f_dentry->d_inode, cache_inode);
-        duplicate_file(file, sfi->c_file);
+        post_smfs_file(file);
 
         RETURN(rc);
 }
@@ -491,7 +470,6 @@ static int fsfilt_smfs_write_record(struct file *file, void *buf, int bufsize,
         struct  fsfilt_operations *cache_fsfilt;
         struct  inode *cache_inode;
         struct  smfs_file_info *sfi;
-        loff_t  tmp_ppos;
         loff_t  *cache_ppos;
         ssize_t rc = -EIO;
 
@@ -502,30 +480,20 @@ static int fsfilt_smfs_write_record(struct file *file, void *buf, int bufsize,
                 RETURN(-EINVAL);
 
         cache_inode = I2CI(file->f_dentry->d_inode);
-
         if (!cache_inode)
                 RETURN(-EINVAL);
 
         sfi = F2SMFI(file);
-        if (sfi->magic != SMFS_FILE_MAGIC)
-                BUG();
-
-        if (offs != &(file->f_pos))
-                cache_ppos = &tmp_ppos;
-        else
-                cache_ppos = &sfi->c_file->f_pos;
-        *cache_ppos = *offs;
-
-        pre_smfs_inode(file->f_dentry->d_inode, cache_inode);
+        LASSERT(sfi->magic == SMFS_FILE_MAGIC);
 
         if (!cache_fsfilt->fs_write_record)
                 RETURN(-ENOSYS);
-
+        
+        pre_smfs_file(file, offs, &cache_ppos);
         rc = cache_fsfilt->fs_write_record(sfi->c_file, buf,
                                            bufsize, cache_ppos, force_sync);
-        *offs = *cache_ppos;
-        post_smfs_inode(file->f_dentry->d_inode, cache_inode);
-        duplicate_file(file, sfi->c_file);
+
+        post_smfs_file(file);
 
         RETURN(rc);
 }
@@ -698,17 +666,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 fsfilt_operations *cache_fsfilt = I2FOPS(inode);
+        struct inode *cache_inode = NULL;
         struct hook_xattr_msg msg = {
                 .name = name,
                 .buffer = buffer,
                 .buffer_size = buffer_size
         };
-        int     rc = -EIO;
+        int    rc = -EIO;
+        int    lov = 0;
         
         ENTRY;
         
@@ -719,6 +689,7 @@ static int fsfilt_smfs_set_xattr(struct inode *inode, void *handle, char *name,
         if (!cache_inode)
                 RETURN(rc);
         
+        lov = (!strcmp(name, XATTR_LUSTRE_MDS_LOV_EA));
         pre_smfs_inode(inode, cache_inode);
         SMFS_PRE_HOOK(inode, HOOK_F_SETXATTR, &msg);
         if (cache_fsfilt->fs_set_xattr)
@@ -750,17 +721,9 @@ static int fsfilt_smfs_get_xattr(struct inode *inode, char *name,
                 rc = cache_fsfilt->fs_get_xattr(cache_inode, name,
                                                 buffer, buffer_size);
         post_smfs_inode(inode, cache_inode);
-
         RETURN(rc);
 }
 
-#define XATTR_LUSTRE_MDS_LOV_EA         "lov"
-#define XATTR_LUSTRE_MDS_MEA_EA         "mea"
-#define XATTR_LUSTRE_MDS_MID_EA         "mid"
-#define XATTR_LUSTRE_MDS_SID_EA         "sid"
-#define XATTR_LUSTRE_MDS_PID_EA         "pid"
-#define XATTR_LUSTRE_MDS_KEY_EA         "key"
-
 static int fsfilt_smfs_set_md(struct inode *inode, void *handle,
                               void *lmm, int lmm_size, enum ea_type type)
 {
@@ -782,11 +745,6 @@ static int fsfilt_smfs_set_md(struct inode *inode, void *handle,
                                            XATTR_LUSTRE_MDS_SID_EA,
                                            lmm, lmm_size);
                 break;
-        case EA_MID:
-                rc = fsfilt_smfs_set_xattr(inode, handle,
-                                           XATTR_LUSTRE_MDS_MID_EA,
-                                           lmm, lmm_size);
-                break;
         case EA_PID:
                 rc = fsfilt_smfs_set_xattr(inode, handle,
                                            XATTR_LUSTRE_MDS_PID_EA,
@@ -825,11 +783,6 @@ static int fsfilt_smfs_get_md(struct inode *inode, void *lmm,
                                            XATTR_LUSTRE_MDS_SID_EA,
                                            lmm, lmm_size);
                 break;
-        case EA_MID:
-                rc = fsfilt_smfs_get_xattr(inode,
-                                           XATTR_LUSTRE_MDS_MID_EA,
-                                           lmm, lmm_size);
-                break;
         case EA_PID:
                 rc = fsfilt_smfs_get_xattr(inode,
                                            XATTR_LUSTRE_MDS_PID_EA,
@@ -1237,7 +1190,7 @@ static int fsfilt_smfs_set_info (struct super_block *sb, struct inode * inode,
                 audit_client_log(sb, val);
         }
         else if (keylen == 5 && memcmp(key, "audit", 5) == 0) {
-                rc = smfs_set_audit(sb, inode, (__u64 *)val);
+                smfs_set_audit(sb, inode, (__u64 *)val);
         }   
         else if (keylen == 7 && memcmp(key, "id2name", 7) == 0) {
                 rc = SMFS_PLG_HELP(sb, PLG_SET_INFO, &msg);