X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fllite%2Fpcc.c;h=b80173e768ec9f76240f1ceab4df5cc69fab0b4d;hb=86868afde5a5ebfda9aa8560a464c046d97d14d6;hp=d824c1b4414becdbd5876d8e7b381e485b382dec;hpb=11f2c86650fda8f1df606686799752223339b9e9;p=fs%2Flustre-release.git diff --git a/lustre/llite/pcc.c b/lustre/llite/pcc.c index d824c1b..b80173e 100644 --- a/lustre/llite/pcc.c +++ b/lustre/llite/pcc.c @@ -1106,16 +1106,9 @@ static int pcc_layout_xattr_set(struct pcc_inode *pcci, __u32 gen) 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); } @@ -1238,18 +1231,8 @@ static int pcc_try_dataset_attach(struct inode *inode, __u32 gen, 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); @@ -1456,11 +1439,10 @@ int pcc_file_open(struct inode *inode, struct file *file) { 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; @@ -1490,17 +1472,10 @@ int pcc_file_open(struct inode *inode, struct file *file) 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); @@ -1517,10 +1492,9 @@ out_unlock: 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; @@ -1535,9 +1509,7 @@ void pcc_file_release(struct inode *inode, struct file *file) 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; @@ -1619,7 +1591,7 @@ ssize_t pcc_file_read_iter(struct kiocb *iocb, 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; @@ -1686,7 +1658,7 @@ ssize_t pcc_file_write_iter(struct kiocb *iocb, 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; @@ -1758,7 +1730,8 @@ int pcc_inode_setattr(struct inode *inode, struct iattr *attr, 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; @@ -1780,7 +1753,8 @@ int pcc_inode_getattr(struct inode *inode, bool *cached) 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); @@ -1825,7 +1799,7 @@ ssize_t pcc_file_splice_read(struct file *in_file, loff_t *ppos, bool *cached) { 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; ssize_t result; @@ -1854,7 +1828,7 @@ 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; @@ -1880,7 +1854,7 @@ int pcc_file_mmap(struct file *file, struct vm_area_struct *vma, 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; @@ -1915,7 +1889,7 @@ void pcc_vm_open(struct vm_area_struct *vma) 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; @@ -1939,7 +1913,7 @@ void pcc_vm_close(struct vm_area_struct *vma) { 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; @@ -1964,7 +1938,7 @@ int pcc_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, 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; @@ -2044,7 +2018,7 @@ int pcc_fault(struct vm_area_struct *vma, struct vm_fault *vmf, { 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; @@ -2072,22 +2046,17 @@ int pcc_fault(struct vm_area_struct *vma, struct vm_fault *vmf, 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) @@ -2118,9 +2087,8 @@ static int pcc_inode_remove(struct inode *inode, struct dentry *pcc_dentry) 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; } @@ -2197,7 +2165,7 @@ pcc_create(struct dentry *base, const char *name, umode_t mode) 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); @@ -2354,9 +2322,8 @@ void pcc_create_attach_cleanup(struct super_block *sb, 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); @@ -2472,12 +2439,7 @@ int pcc_readwrite_attach(struct file *file, struct inode *inode, 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); @@ -2680,7 +2642,7 @@ int pcc_ioctl_state(struct file *file, struct inode *inode, 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;