Whamcloud - gitweb
- unland b_fid to HEAD
[fs/lustre-release.git] / lustre / smfs / file.c
index af1e1f5..3a79ddd 100644 (file)
@@ -39,6 +39,7 @@
 #include <linux/lustre_idl.h>
 #include <linux/lustre_fsfilt.h>
 #include <linux/lustre_smfs.h>
+#include <linux/lustre_snap.h>
 
 #include "smfs_internal.h"
 
@@ -62,6 +63,14 @@ static ssize_t smfs_write(struct file *filp, const char *buf, size_t count,
         if (sfi->magic != SMFS_FILE_MAGIC) 
                 LBUG();
 
+        if (filp->f_flags & O_APPEND)
+                tmp_ppos = filp->f_dentry->d_inode->i_size;
+        else {
+                tmp_ppos = *ppos;
+        }
+        SMFS_HOOK(filp->f_dentry->d_inode, filp->f_dentry, &count, &tmp_ppos,
+                  HOOK_WRITE, NULL, PRE_HOOK, rc, exit);
+
         if (ppos != &(filp->f_pos)) {
                 cache_ppos = &tmp_ppos;
         } else {
@@ -76,8 +85,8 @@ static ssize_t smfs_write(struct file *filp, const char *buf, size_t count,
                                                count, cache_ppos);
         }
 
-        SMFS_KML_POST(filp->f_dentry->d_inode, filp->f_dentry,
-                      ppos, &count, REINT_WRITE, "write", rc, exit);
+        SMFS_HOOK(filp->f_dentry->d_inode, filp->f_dentry, ppos, &count,
+                  HOOK_WRITE, NULL, POST_HOOK, rc, exit);
 exit:
         post_smfs_inode(filp->f_dentry->d_inode, cache_inode);
         *ppos = *cache_ppos;
@@ -292,11 +301,9 @@ int smfs_open(struct inode *inode, struct file *filp)
         if ((rc = smfs_init_cache_file(inode, filp)))
                 RETURN(rc);
 
-        pre_smfs_inode(inode, cache_inode);
         if (cache_inode->i_fop->open)
                 rc = cache_inode->i_fop->open(cache_inode, F2CF(filp));
 
-        post_smfs_inode(inode, cache_inode);
         duplicate_file(filp, F2CF(filp));
         RETURN(rc);
 }
@@ -318,12 +325,10 @@ int smfs_release(struct inode *inode, struct file *filp)
                         LBUG();
                 cache_file = sfi->c_file;
         }
-        pre_smfs_inode(inode, cache_inode);
         if (cache_inode->i_fop->release)
                 rc = cache_inode->i_fop->release(cache_inode, cache_file);
 
         post_smfs_inode(inode, cache_inode);
-        duplicate_file(filp, cache_file);
 
         smfs_cleanup_cache_file(filp);
         RETURN(rc);
@@ -424,8 +429,9 @@ int smfs_setattr(struct dentry *dentry, struct iattr *attr)
         if (cache_inode->i_op->setattr)
                 rc = cache_inode->i_op->setattr(cache_dentry, attr);
 
-        SMFS_KML_POST(dentry->d_inode, dentry, attr, NULL,
-                      REINT_SETATTR, "setattr", rc, exit);
+        SMFS_HOOK(dentry->d_inode, dentry, attr, NULL, HOOK_SETATTR, NULL, 
+                  POST_HOOK, rc, exit); 
+                  
 exit:
         post_smfs_inode(dentry->d_inode, cache_inode);
         post_smfs_dentry(cache_dentry);