Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
LU-13799 llite: Implement lower/upper aio
[fs/lustre-release.git]
/
lustre
/
llite
/
pcc.c
diff --git
a/lustre/llite/pcc.c
b/lustre/llite/pcc.c
index
9e5be20
..
f60ab53
100644
(file)
--- a/
lustre/llite/pcc.c
+++ b/
lustre/llite/pcc.c
@@
-214,13
+214,13
@@
pcc_fname_list_add(struct cfs_lstr *id, struct list_head *fname_list)
{
struct pcc_match_fname *fname;
- OBD_ALLOC
(fname, sizeof(struct pcc_match_fname)
);
+ OBD_ALLOC
_PTR(fname
);
if (fname == NULL)
return -ENOMEM;
OBD_ALLOC(fname->pmf_name, id->ls_len + 1);
if (fname->pmf_name == NULL) {
- OBD_FREE
(fname, sizeof(struct pcc_match_fname)
);
+ OBD_FREE
_PTR(fname
);
return -ENOMEM;
}
@@
-313,7
+313,7
@@
pcc_expression_parse(struct cfs_lstr *src, struct list_head *cond_list)
struct cfs_lstr field;
int rc = 0;
- OBD_ALLOC
(expr, sizeof(struct pcc_expression)
);
+ OBD_ALLOC
_PTR(expr
);
if (expr == NULL)
return -ENOMEM;
@@
-371,7
+371,7
@@
pcc_conjunction_parse(struct cfs_lstr *src, struct list_head *cond_list)
struct cfs_lstr expr;
int rc = 0;
- OBD_ALLOC
(conjunction, sizeof(struct pcc_conjunction)
);
+ OBD_ALLOC
_PTR(conjunction
);
if (conjunction == NULL)
return -ENOMEM;
@@
-1057,18
+1057,18
@@
void pcc_inode_free(struct inode *inode)
* reduce overhead:
* (fid->f_oid >> 16 & oxFFFF)/FID
*/
-#define
MAX_PCC_DATABASE
_PATH (6 * 5 + FID_NOBRACE_LEN + 1)
+#define
PCC_DATASET_MAX
_PATH (6 * 5 + FID_NOBRACE_LEN + 1)
static int pcc_fid2dataset_path(char *buf, int sz, struct lu_fid *fid)
{
- return snprintf(buf, sz, "%04x/%04x/%04x/%04x/%04x/%04x/"
- DFID_NOBRACE,
- (fid)->f_oid & 0xFFFF,
- (fid)->f_oid >> 16 & 0xFFFF,
- (unsigned int)((fid)->f_seq & 0xFFFF),
- (unsigned int)((fid)->f_seq >> 16 & 0xFFFF),
- (unsigned int)((fid)->f_seq >> 32 & 0xFFFF),
- (unsigned int)((fid)->f_seq >> 48 & 0xFFFF),
- PFID(fid));
+ return s
c
nprintf(buf, sz, "%04x/%04x/%04x/%04x/%04x/%04x/"
+
DFID_NOBRACE,
+
(fid)->f_oid & 0xFFFF,
+
(fid)->f_oid >> 16 & 0xFFFF,
+
(unsigned int)((fid)->f_seq & 0xFFFF),
+
(unsigned int)((fid)->f_seq >> 16 & 0xFFFF),
+
(unsigned int)((fid)->f_seq >> 32 & 0xFFFF),
+
(unsigned int)((fid)->f_seq >> 48 & 0xFFFF),
+
PFID(fid));
}
static inline const struct cred *pcc_super_cred(struct super_block *sb)
@@
-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);
}
@@
-1136,27
+1129,12
@@
static int pcc_get_layout_info(struct inode *inode, struct cl_layout *clt)
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);
-}
-
-static int pcc_fid2dataset_fullpath(char *buf, int sz, struct lu_fid *fid,
- struct pcc_dataset *dataset)
-{
- return snprintf(buf, sz, "%s/%04x/%04x/%04x/%04x/%04x/%04x/"
- DFID_NOBRACE,
- dataset->pccd_pathname,
- (fid)->f_oid & 0xFFFF,
- (fid)->f_oid >> 16 & 0xFFFF,
- (unsigned int)((fid)->f_seq & 0xFFFF),
- (unsigned int)((fid)->f_seq >> 16 & 0xFFFF),
- (unsigned int)((fid)->f_seq >> 32 & 0xFFFF),
- (unsigned int)((fid)->f_seq >> 48 & 0xFFFF),
- PFID(fid));
+ RETURN(rc < 0 ? rc : 0);
}
/* Must be called with pcci->pcci_lock held */
@@
-1205,6
+1183,72
@@
static inline bool pcc_inode_has_layout(struct pcc_inode *pcci)
return pcci->pcci_layout_gen != CL_LAYOUT_GEN_NONE;
}
+static struct dentry *pcc_lookup(struct dentry *base, char *pathname)
+{
+ char *ptr = NULL, *component;
+ struct dentry *parent;
+ struct dentry *child = ERR_PTR(-ENOENT);
+
+ ptr = pathname;
+
+ /* move past any initial '/' to the start of the first path component*/
+ while (*ptr == '/')
+ ptr++;
+
+ /* store the start of the first path component */
+ component = ptr;
+
+ parent = dget(base);
+ while (ptr) {
+ /* find the start of the next component - if we don't find it,
+ * the current component is the last component
+ */
+ ptr = strchr(ptr, '/');
+ /* put a NUL char in place of the '/' before the next compnent
+ * so we can treat this component as a string; note the full
+ * path string is NUL terminated to this is not needed for the
+ * last component
+ */
+ if (ptr)
+ *ptr = '\0';
+
+ /* look up the current component */
+ inode_lock(parent->d_inode);
+ child = lookup_one_len(component, parent, strlen(component));
+ inode_unlock(parent->d_inode);
+
+ /* repair the path string: put '/' back in place of the NUL */
+ if (ptr)
+ *ptr = '/';
+
+ dput(parent);
+
+ if (IS_ERR_OR_NULL(child))
+ break;
+
+ /* we may find a cached negative dentry */
+ if (!d_is_positive(child)) {
+ dput(child);
+ child = NULL;
+ break;
+ }
+
+ /* descend in to the next level of the path */
+ parent = child;
+
+ /* move the pointer past the '/' to the next component */
+ if (ptr)
+ ptr++;
+ component = ptr;
+ }
+
+ /* NULL child means we didn't find anything */
+ if (!child)
+ child = ERR_PTR(-ENOENT);
+
+ return child;
+}
+
static int pcc_try_dataset_attach(struct inode *inode, __u32 gen,
enum lu_pcc_type type,
struct pcc_dataset *dataset,
@@
-1213,9
+1257,8
@@
static int pcc_try_dataset_attach(struct inode *inode, __u32 gen,
struct ll_inode_info *lli = ll_i2info(inode);
struct pcc_inode *pcci = lli->lli_pcc_inode;
const struct cred *old_cred;
- struct dentry *pcc_dentry;
- struct path path;
- char *pathname;
+ struct dentry *pcc_dentry = NULL;
+ char pathname[PCC_DATASET_MAX_PATH];
__u32 pcc_gen;
int rc;
@@
-1225,34
+1268,25
@@
static int pcc_try_dataset_attach(struct inode *inode, __u32 gen,
!(dataset->pccd_flags & PCC_DATASET_RWPCC))
RETURN(0);
- OBD_ALLOC(pathname, PATH_MAX);
- if (pathname == NULL)
- RETURN(-ENOMEM);
-
- pcc_fid2dataset_fullpath(pathname, PATH_MAX, &lli->lli_fid, dataset);
+ rc = pcc_fid2dataset_path(pathname, PCC_DATASET_MAX_PATH,
+ &lli->lli_fid);
old_cred = override_creds(pcc_super_cred(inode->i_sb));
- rc = kern_path(pathname, LOOKUP_FOLLOW, &path);
- if (rc)
+ pcc_dentry = pcc_lookup(dataset->pccd_path.dentry, pathname);
+ if (IS_ERR(pcc_dentry)) {
+ rc = PTR_ERR(pcc_dentry);
+ CDEBUG(D_CACHE, "%s: path lookup error on "DFID":%s: rc = %d\n",
+ ll_i2sbi(inode)->ll_fsname, PFID(&lli->lli_fid),
+ pathname, rc);
/* ignore this error */
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_p
ath
, rc = 0);
+ GOTO(out_put_p
cc_dentry
, rc = 0);
rc = 0;
/* The file is still valid cached in PCC, attach it immediately. */
@@
-1262,7
+1296,7
@@
static int pcc_try_dataset_attach(struct inode *inode, __u32 gen,
if (!pcci) {
OBD_SLAB_ALLOC_PTR_GFP(pcci, pcc_inode_slab, GFP_NOFS);
if (pcci == NULL)
- GOTO(out_put_p
ath
, rc = -ENOMEM);
+ GOTO(out_put_p
cc_dentry
, rc = -ENOMEM);
pcc_inode_init(pcci, lli);
dget(pcc_dentry);
@@
-1284,11
+1318,10
@@
static int pcc_try_dataset_attach(struct inode *inode, __u32 gen,
pcc_layout_gen_set(pcci, gen);
*cached = true;
}
-out_put_p
ath
:
-
path_put(&path
);
+out_put_p
cc_dentry
:
+
dput(pcc_dentry
);
out:
revert_creds(old_cred);
- OBD_FREE(pathname, PATH_MAX);
RETURN(rc);
}
@@
-1456,11
+1489,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;
@@
-1469,6
+1501,9
@@
int pcc_file_open(struct inode *inode, struct file *file)
if (!S_ISREG(inode->i_mode))
RETURN(0);
+ if (IS_ENCRYPTED(inode))
+ RETURN(0);
+
pcc_inode_lock(inode);
pcci = ll_i2pcci(inode);
@@
-1490,17
+1525,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
+1545,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
+1562,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;
@@
-1576,7
+1601,7
@@
static void pcc_io_fini(struct inode *inode)
LASSERT(pcci && atomic_read(&pcci->pcci_active_ios) > 0);
if (atomic_dec_and_test(&pcci->pcci_active_ios))
- wake_up
_all
(&pcci->pcci_waitq);
+ wake_up(&pcci->pcci_waitq);
}
@@
-1619,7
+1644,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
+1711,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
+1783,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,13
+1806,14
@@
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);
ll_inode_size_lock(inode);
- if (
ll_file_test_and_clear_flag(lli, LLIF_UPDATE_ATIME
) ||
+ if (
test_and_clear_bit(LLIF_UPDATE_ATIME, &lli->lli_flags
) ||
inode->i_atime.tv_sec < lli->lli_atime)
inode->i_atime.tv_sec = lli->lli_atime;
@@
-1819,42
+1846,40
@@
out:
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);
+ RETURN(default_file_splice_read(in_file, ppos, pipe,
+ count, flags));
- if (!file_inode(pcc_file)->i_fop->splice_read)
- RETURN(-ENOTSUPP);
+ pcc_io_init(inode, PIT_SPLICE_READ, &cached);
+ if (!cached)
+ RETURN(default_file_splice_read(in_file, ppos, pipe,
+ count, flags));
- pcc_io_init(inode, PIT_SPLICE_READ, cached);
- if (!*cached)
- RETURN(0);
-
- 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;
@@
-1880,7
+1905,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
+1940,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
+1964,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
+1989,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;
@@
-1982,7
+2007,7
@@
int pcc_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
"%s: PCC backend fs not support ->page_mkwrite()\n",
ll_i2sbi(inode)->ll_fsname);
pcc_ioctl_detach(inode, PCC_DETACH_OPT_UNCACHE);
-
up_read(&mm->mmap_se
m);
+
mmap_read_unlock(m
m);
*cached = true;
RETURN(VM_FAULT_RETRY | VM_FAULT_NOPAGE);
}
@@
-2009,7
+2034,7
@@
int pcc_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
*/
if (page->mapping == pcc_file->f_mapping) {
*cached = true;
-
up_read(&mm->mmap_se
m);
+
mmap_read_unlock(m
m);
RETURN(VM_FAULT_RETRY | VM_FAULT_NOPAGE);
}
@@
-2023,7
+2048,7
@@
int pcc_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
if (OBD_FAIL_CHECK(OBD_FAIL_LLITE_PCC_DETACH_MKWRITE)) {
pcc_io_fini(inode);
pcc_ioctl_detach(inode, PCC_DETACH_OPT_UNCACHE);
-
up_read(&mm->mmap_se
m);
+
mmap_read_unlock(m
m);
RETURN(VM_FAULT_RETRY | VM_FAULT_NOPAGE);
}
@@
-2044,7
+2069,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
+2097,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
+2138,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
+2216,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);
@@
-2217,11
+2236,11
@@
static int __pcc_inode_create(struct pcc_dataset *dataset,
struct dentry *child;
int rc = 0;
- OBD_ALLOC(path,
MAX_PCC_DATABASE
_PATH);
+ OBD_ALLOC(path,
PCC_DATASET_MAX
_PATH);
if (path == NULL)
return -ENOMEM;
- pcc_fid2dataset_path(path,
MAX_PCC_DATABASE
_PATH, fid);
+ pcc_fid2dataset_path(path,
PCC_DATASET_MAX
_PATH, fid);
base = pcc_mkdir_p(dataset->pccd_path.dentry, path, 0);
if (IS_ERR(base)) {
@@
-2229,7
+2248,7
@@
static int __pcc_inode_create(struct pcc_dataset *dataset,
GOTO(out, rc);
}
- snprintf(path,
MAX_PCC_DATABASE
_PATH, DFID_NOBRACE, PFID(fid));
+ snprintf(path,
PCC_DATASET_MAX
_PATH, DFID_NOBRACE, PFID(fid));
child = pcc_create(base, path, 0);
if (IS_ERR(child)) {
rc = PTR_ERR(child);
@@
-2240,7
+2259,7
@@
static int __pcc_inode_create(struct pcc_dataset *dataset,
out_base:
dput(base);
out:
- OBD_FREE(path,
MAX_PCC_DATABASE
_PATH);
+ OBD_FREE(path,
PCC_DATASET_MAX
_PATH);
return rc;
}
@@
-2354,9
+2373,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
+2490,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
+2693,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;