if (!(lli->lli_pcc_dsflags & PCC_DATASET_AUTO_ATTACH))
RETURN(0);
-#ifndef HAVE_VFS_SETXATTR
- if (!pcc_dentry->d_inode->i_op->setxattr)
- RETURN(-ENOTSUPP);
+ rc = ll_vfs_setxattr(pcc_dentry, pcc_dentry->d_inode, pcc_xattr_layout,
+ &gen, sizeof(gen), 0);
- rc = pcc_dentry->d_inode->i_op->setxattr(pcc_dentry, pcc_xattr_layout,
- &gen, sizeof(gen), 0);
-#else
- rc = __vfs_setxattr(pcc_dentry, pcc_dentry->d_inode, pcc_xattr_layout,
- &gen, sizeof(gen), 0);
-#endif
RETURN(rc);
}
RETURN(PTR_ERR(env));
rc = cl_object_layout_get(env, lli->lli_clob, clt);
- if (rc)
+ if (rc < 0)
CDEBUG(D_INODE, "Cannot get layout for "DFID"\n",
PFID(ll_inode2fid(inode)));
cl_env_put(env, &refcheck);
- RETURN(rc);
+ RETURN(rc < 0 ? rc : 0);
}
static int pcc_fid2dataset_fullpath(char *buf, int sz, struct lu_fid *fid,
GOTO(out, rc = 0);
pcc_dentry = path.dentry;
-#ifndef HAVE_VFS_SETXATTR
- if (!pcc_dentry->d_inode->i_op->getxattr)
- /* ignore this error */
- GOTO(out_put_path, rc = 0);
-
- rc = pcc_dentry->d_inode->i_op->getxattr(pcc_dentry, pcc_xattr_layout,
- &pcc_gen, sizeof(pcc_gen));
-#else
- rc = __vfs_getxattr(pcc_dentry, pcc_dentry->d_inode, pcc_xattr_layout,
- &pcc_gen, sizeof(pcc_gen));
-#endif
-
+ rc = ll_vfs_getxattr(pcc_dentry, pcc_dentry->d_inode, pcc_xattr_layout,
+ &pcc_gen, sizeof(pcc_gen));
if (rc < 0)
/* ignore this error */
GOTO(out_put_path, rc = 0);
{
struct pcc_inode *pcci;
struct ll_inode_info *lli = ll_i2info(inode);
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct pcc_file *pccf = &fd->fd_pcc_file;
struct file *pcc_file;
struct path *path;
- struct qstr *dname;
bool cached = false;
int rc = 0;
WARN_ON(pccf->pccf_file);
path = &pcci->pcci_path;
- dname = &path->dentry->d_name;
- CDEBUG(D_CACHE, "opening pcc file '%.*s'\n", dname->len,
- dname->name);
+ CDEBUG(D_CACHE, "opening pcc file '%pd'\n", path->dentry);
-#ifdef HAVE_DENTRY_OPEN_USE_PATH
pcc_file = dentry_open(path, file->f_flags,
pcc_super_cred(inode->i_sb));
-#else
- pcc_file = dentry_open(path->dentry, path->mnt, file->f_flags,
- pcc_super_cred(inode->i_sb));
-#endif
if (IS_ERR_OR_NULL(pcc_file)) {
rc = pcc_file == NULL ? -EINVAL : PTR_ERR(pcc_file);
pcc_inode_put(pcci);
void pcc_file_release(struct inode *inode, struct file *file)
{
struct pcc_inode *pcci;
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct pcc_file *pccf;
struct path *path;
- struct qstr *dname;
ENTRY;
pcci = ll_i2pcci(inode);
LASSERT(pcci);
path = &pcci->pcci_path;
- dname = &path->dentry->d_name;
- CDEBUG(D_CACHE, "releasing pcc file \"%.*s\"\n", dname->len,
- dname->name);
+ CDEBUG(D_CACHE, "releasing pcc file \"%pd\"\n", path->dentry);
pcc_inode_put(pcci);
fput(pccf->pccf_file);
pccf->pccf_file = NULL;
struct iov_iter *iter, bool *cached)
{
struct file *file = iocb->ki_filp;
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct pcc_file *pccf = &fd->fd_pcc_file;
struct inode *inode = file_inode(file);
ssize_t result;
struct iov_iter *iter, bool *cached)
{
struct file *file = iocb->ki_filp;
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct pcc_file *pccf = &fd->fd_pcc_file;
struct inode *inode = file_inode(file);
ssize_t result;
RETURN(rc);
}
-int pcc_inode_getattr(struct inode *inode, bool *cached)
+int pcc_inode_getattr(struct inode *inode, u32 request_mask,
+ unsigned int flags, bool *cached)
{
struct ll_inode_info *lli = ll_i2info(inode);
const struct cred *old_cred;
RETURN(0);
old_cred = override_creds(pcc_super_cred(inode->i_sb));
- rc = ll_vfs_getattr(&ll_i2pcci(inode)->pcci_path, &stat);
+ rc = ll_vfs_getattr(&ll_i2pcci(inode)->pcci_path, &stat, request_mask,
+ flags);
revert_creds(old_cred);
if (rc)
GOTO(out, rc);
RETURN(rc);
}
+#ifdef HAVE_DEFAULT_FILE_SPLICE_READ_EXPORT
ssize_t pcc_file_splice_read(struct file *in_file, loff_t *ppos,
struct pipe_inode_info *pipe,
- size_t count, unsigned int flags,
- bool *cached)
+ size_t count, unsigned int flags)
{
struct inode *inode = file_inode(in_file);
- struct ll_file_data *fd = LUSTRE_FPRIVATE(in_file);
+ struct ll_file_data *fd = in_file->private_data;
struct file *pcc_file = fd->fd_pcc_file.pccf_file;
+ bool cached = false;
ssize_t result;
ENTRY;
- *cached = false;
if (!pcc_file)
- RETURN(0);
-
- if (!file_inode(pcc_file)->i_fop->splice_read)
- RETURN(-ENOTSUPP);
+ RETURN(default_file_splice_read(in_file, ppos, pipe,
+ count, flags));
- pcc_io_init(inode, PIT_SPLICE_READ, cached);
- if (!*cached)
- RETURN(0);
+ pcc_io_init(inode, PIT_SPLICE_READ, &cached);
+ if (!cached)
+ RETURN(default_file_splice_read(in_file, ppos, pipe,
+ count, flags));
- result = file_inode(pcc_file)->i_fop->splice_read(pcc_file,
- ppos, pipe, count,
- flags);
+ result = default_file_splice_read(pcc_file, ppos, pipe, count, flags);
pcc_io_fini(inode);
RETURN(result);
}
+#endif /* HAVE_DEFAULT_FILE_SPLICE_READ_EXPORT */
int pcc_fsync(struct file *file, loff_t start, loff_t end,
int datasync, bool *cached)
{
struct inode *inode = file_inode(file);
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct file *pcc_file = fd->fd_pcc_file.pccf_file;
int rc;
bool *cached)
{
struct inode *inode = file_inode(file);
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct file *pcc_file = fd->fd_pcc_file.pccf_file;
struct pcc_inode *pcci;
int rc = 0;
struct pcc_inode *pcci;
struct file *file = vma->vm_file;
struct inode *inode = file_inode(file);
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct file *pcc_file = fd->fd_pcc_file.pccf_file;
struct vm_operations_struct *pcc_vm_ops = vma->vm_private_data;
{
struct file *file = vma->vm_file;
struct inode *inode = file_inode(file);
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct file *pcc_file = fd->fd_pcc_file.pccf_file;
struct vm_operations_struct *pcc_vm_ops = vma->vm_private_data;
struct mm_struct *mm = vma->vm_mm;
struct file *file = vma->vm_file;
struct inode *inode = file_inode(file);
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct file *pcc_file = fd->fd_pcc_file.pccf_file;
struct vm_operations_struct *pcc_vm_ops = vma->vm_private_data;
int rc;
{
struct file *file = vma->vm_file;
struct inode *inode = file_inode(file);
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct file *pcc_file = fd->fd_pcc_file.pccf_file;
struct vm_operations_struct *pcc_vm_ops = vma->vm_private_data;
int rc;
RETURN(rc);
}
-static void pcc_layout_wait(struct pcc_inode *pcci)
-{
-
- while (atomic_read(&pcci->pcci_active_ios) > 0) {
- CDEBUG(D_CACHE, "Waiting for IO completion: %d\n",
- atomic_read(&pcci->pcci_active_ios));
- wait_event_idle(pcci->pcci_waitq,
- atomic_read(&pcci->pcci_active_ios) == 0);
- }
-}
-
static void __pcc_layout_invalidate(struct pcc_inode *pcci)
{
pcci->pcci_type = LU_PCC_NONE;
pcc_layout_gen_set(pcci, CL_LAYOUT_GEN_NONE);
- pcc_layout_wait(pcci);
+ if (atomic_read(&pcci->pcci_active_ios) == 0)
+ return;
+
+ CDEBUG(D_CACHE, "Waiting for IO completion: %d\n",
+ atomic_read(&pcci->pcci_active_ios));
+ wait_event_idle(pcci->pcci_waitq,
+ atomic_read(&pcci->pcci_active_ios) == 0);
}
void pcc_layout_invalidate(struct inode *inode)
rc = ll_vfs_unlink(pcc_dentry->d_parent->d_inode, pcc_dentry);
if (rc)
- CWARN("%s: failed to unlink PCC file %.*s, rc = %d\n",
- ll_i2sbi(inode)->ll_fsname, pcc_dentry->d_name.len,
- pcc_dentry->d_name.name, rc);
+ CWARN("%s: failed to unlink PCC file %pd, rc = %d\n",
+ ll_i2sbi(inode)->ll_fsname, pcc_dentry, rc);
return rc;
}
if (d_is_positive(dentry))
goto out;
- rc = vfs_create(dir, dentry, mode, LL_VFS_CREATE_FALSE);
+ rc = vfs_create(dir, dentry, mode, false);
if (rc) {
dput(dentry);
dentry = ERR_PTR(rc);
rc = ll_vfs_unlink(pca->pca_dentry->d_parent->d_inode,
pca->pca_dentry);
if (rc)
- CWARN("failed to unlink PCC file %.*s, rc = %d\n",
- pca->pca_dentry->d_name.len,
- pca->pca_dentry->d_name.name, rc);
+ CWARN("%s: failed to unlink PCC file %pd: rc = %d\n",
+ ll_s2sbi(sb)->ll_fsname, pca->pca_dentry, rc);
/* ignore the unlink failure */
revert_creds(old_cred);
dput(pca->pca_dentry);
path.mnt = dataset->pccd_path.mnt;
path.dentry = dentry;
-#ifdef HAVE_DENTRY_OPEN_USE_PATH
pcc_filp = dentry_open(&path, O_WRONLY | O_LARGEFILE, current_cred());
-#else
- pcc_filp = dentry_open(path.dentry, path.mnt, O_WRONLY | O_LARGEFILE,
- current_cred());
-#endif
if (IS_ERR_OR_NULL(pcc_filp)) {
rc = pcc_filp == NULL ? -EINVAL : PTR_ERR(pcc_filp);
GOTO(out_dentry, rc);
char *buf;
char *path;
int buf_len = sizeof(state->pccs_path);
- struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+ struct ll_file_data *fd = file->private_data;
struct pcc_file *pccf = &fd->fd_pcc_file;
struct pcc_inode *pcci;