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 = 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);
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);
}
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);
}
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;
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)
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)
{
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,
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,