#endif
}
}
+static inline void pre_smfs_file(struct file * file, loff_t *off,
+ loff_t **backfs_off)
+{
+
+ if (off != &file->f_pos)
+ *backfs_off = off;
+ else
+ *backfs_off = &(F2CF(file)->f_pos);
+
+ F2CF(file)->f_pos = file->f_pos;
+ pre_smfs_inode(file->f_dentry->d_inode,
+ I2CI(file->f_dentry->d_inode));
+}
+
+static inline void post_smfs_file(struct file *file)
+{
+ post_smfs_inode(file->f_dentry->d_inode,
+ I2CI(file->f_dentry->d_inode));
+ duplicate_file(file, F2CF(file));
+}
static inline void duplicate_sb(struct super_block *dst_sb,
struct super_block *src_sb)
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);
}
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);
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);
}
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 = {
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
#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);
}
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;
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);
}
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;
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);
}