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-13314 utils: fix lfs find time calculation margin
[fs/lustre-release.git]
/
lustre
/
llite
/
pcc.c
diff --git
a/lustre/llite/pcc.c
b/lustre/llite/pcc.c
index
57585e0
..
b80173e
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;
@@
-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);
@@
-1338,21
+1321,18
@@
static int pcc_try_datasets_attach(struct inode *inode, enum pcc_io_type iot,
* from icache later.
* Set the saved dataset flags with PCC_DATASET_NONE. Then this
* file will skip from the candidates to try auto attach until
- * the file is attached
n
into PCC again.
+ * the file is attached into PCC again.
*
* If the file was never attached into PCC, or once attached but
* its inode was evicted from icache (lli_pcc_generation == 0),
+ * or the corresponding dataset was removed from the client,
* set the saved dataset flags with PCC_DATASET_NONE.
*
- * If the file was once attached into PCC but the corresponding
- * dataset was removed from the client, set the saved dataset
- * flags with PCC_DATASET_NONE.
- *
* TODO: If the file was once attached into PCC but not try to
* auto attach due to the change of the configuration parameters
* for this dataset (i.e. change from auto attach enabled to
* auto attach disabled for this dataset), update the saved
- * dataset flags with
a
the found one.
+ * dataset flags with the found one.
*/
lli->lli_pcc_dsflags = PCC_DATASET_NONE;
}
@@
-1431,7
+1411,7
@@
static inline bool pcc_may_auto_attach(struct inode *inode,
return false;
/*
- * lli_pcc_generation = 0 means that the file was never attached into
+ * lli_pcc_generation =
=
0 means that the file was never attached into
* PCC, or may be once attached into PCC but detached as the inode is
* evicted from icache (i.e. "echo 3 > /proc/sys/vm/drop_caches" or
* icache shrinking due to the memory pressure), which will cause the
@@
-1440,7
+1420,7
@@
static inline bool pcc_may_auto_attach(struct inode *inode,
*/
/* lli_pcc_generation == 0, or the PCC setting was changed,
* or there is no PCC setup on the client and the try will return
- * immediately in pcc_try_auto_attch().
+ * immediately in pcc_try_auto_att
a
ch().
*/
if (super->pccs_generation != lli->lli_pcc_generation)
return true;
@@
-1459,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;
@@
-1493,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);
@@
-1520,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;
@@
-1538,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;
@@
-1622,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;
@@
-1689,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;
@@
-1761,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;
@@
-1783,17
+1753,17
@@
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 (
inode->i_atime.tv_sec < lli->lli_atime
||
- lli->lli_update_atime) {
+ if (
ll_file_test_and_clear_flag(lli, LLIF_UPDATE_ATIME)
||
+ inode->i_atime.tv_sec < lli->lli_atime)
inode->i_atime.tv_sec = lli->lli_atime;
- lli->lli_update_atime = 0;
- }
+
inode->i_mtime.tv_sec = lli->lli_mtime;
inode->i_ctime.tv_sec = lli->lli_ctime;
@@
-1829,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;
@@
-1858,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;
@@
-1884,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;
@@
-1919,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;
@@
-1943,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;
@@
-1968,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;
@@
-2048,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;
@@
-2076,23
+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)
-{
- struct l_wait_info lwi = { 0 };
-
- while (atomic_read(&pcci->pcci_active_ios) > 0) {
- CDEBUG(D_CACHE, "Waiting for IO completion: %d\n",
- atomic_read(&pcci->pcci_active_ios));
- l_wait_event(pcci->pcci_waitq,
- atomic_read(&pcci->pcci_active_ios) == 0, &lwi);
- }
-}
-
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)
@@
-2123,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;
}
@@
-2202,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);
@@
-2359,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);
@@
-2477,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);
@@
-2685,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;