From 5d32447500107f5abd386400ec9cd8ab8a3d9706 Mon Sep 17 00:00:00 2001 From: Dmitry Eremin Date: Tue, 7 Mar 2017 21:28:42 +0300 Subject: [PATCH] LU-9183 llite: remove struct file on stack in ll_setxattr() Backport upstream commit c139f3cef36291902d7a29a334acd25a1251cd9d Change-Id: I3a7ddf9a2abed8692a203c4d88b9a8ecdaeb9a1a Signed-off-by: Dmitry Eremin Reviewed-on: https://review.whamcloud.com/25893 Tested-by: Jenkins Reviewed-by: Bob Glossman Reviewed-by: James Simmons Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/llite/file.c | 25 +++++++++++++------------ lustre/llite/llite_internal.h | 4 ++-- lustre/llite/xattr.c | 9 +++------ 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 8fe18a2..7aa00c9 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -348,10 +348,9 @@ int ll_file_release(struct inode *inode, struct file *file) RETURN(rc); } -static int ll_intent_file_open(struct file *file, void *lmm, int lmmsize, +static int ll_intent_file_open(struct dentry *de, void *lmm, int lmmsize, struct lookup_intent *itp) { - struct dentry *de = file_dentry(file); struct ll_sb_info *sbi = ll_i2sbi(de->d_inode); struct dentry *parent = de->d_parent; const char *name = NULL; @@ -608,7 +607,8 @@ restart: * to get file with different fid. */ it->it_flags |= MDS_OPEN_BY_FID; - rc = ll_intent_file_open(file, NULL, 0, it); + rc = ll_intent_file_open(file_dentry(file), NULL, 0, + it); if (rc) GOTO(out_openerr, rc); @@ -1523,9 +1523,8 @@ static ssize_t ll_file_splice_read(struct file *in_file, loff_t *ppos, RETURN(result); } -int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file, - __u64 flags, struct lov_user_md *lum, - int lum_size) +int ll_lov_setstripe_ea_info(struct inode *inode, struct dentry *dentry, + __u64 flags, struct lov_user_md *lum, int lum_size) { struct lookup_intent oit = { .it_op = IT_OPEN, @@ -1535,16 +1534,15 @@ int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file, ENTRY; ll_inode_size_lock(inode); - rc = ll_intent_file_open(file, lum, lum_size, &oit); + rc = ll_intent_file_open(dentry, lum, lum_size, &oit); if (rc < 0) GOTO(out_unlock, rc); - ll_release_openhandle(file_dentry(file), &oit); + ll_release_openhandle(dentry, &oit); out_unlock: ll_inode_size_unlock(inode); ll_intent_release(&oit); - cl_lov_delay_create_clear(&file->f_flags); RETURN(rc); } @@ -1663,7 +1661,9 @@ static int ll_lov_setea(struct inode *inode, struct file *file, if (copy_from_user(lump, (struct lov_user_md __user *)arg, lum_size)) GOTO(out_lump, rc = -EFAULT); - rc = ll_lov_setstripe_ea_info(inode, file, flags, lump, lum_size); + rc = ll_lov_setstripe_ea_info(inode, file_dentry(file), flags, lump, + lum_size); + cl_lov_delay_create_clear(&file->f_flags); out_lump: OBD_FREE_LARGE(lump, lum_size); @@ -1701,8 +1701,9 @@ static int ll_lov_setstripe(struct inode *inode, struct file *file, RETURN(rc); lum_size = rc; - rc = ll_lov_setstripe_ea_info(inode, file, flags, klum, lum_size); - + rc = ll_lov_setstripe_ea_info(inode, file_dentry(file), flags, klum, + lum_size); + cl_lov_delay_create_clear(&file->f_flags); OBD_FREE(klum, lum_size); RETURN(rc); } diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h index f5ee50a..ec51a9a 100644 --- a/lustre/llite/llite_internal.h +++ b/lustre/llite/llite_internal.h @@ -819,8 +819,8 @@ int ll_ioctl_fsgetxattr(struct inode *inode, unsigned int cmd, int ll_ioctl_fssetxattr(struct inode *inode, unsigned int cmd, unsigned long arg); -int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file, - __u64 flags, struct lov_user_md *lum, +int ll_lov_setstripe_ea_info(struct inode *inode, struct dentry *dentry, + __u64 flags, struct lov_user_md *lum, int lum_size); int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename, struct lov_mds_md **lmm, int *lmm_size, diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c index 9d9260b..4d42956 100644 --- a/lustre/llite/xattr.c +++ b/lustre/llite/xattr.c @@ -249,9 +249,8 @@ int ll_setstripe_ea(struct dentry *dentry, struct lov_user_md *lump, setstripe: if (lump != NULL && S_ISREG(inode->i_mode)) { - struct file f; - __u64 it_flags = FMODE_WRITE; - int lum_size; + __u64 it_flags = FMODE_WRITE; + int lum_size; lum_size = ll_lov_user_md_size(lump); /** @@ -263,9 +262,7 @@ setstripe: if (lum_size < 0 || size < lum_size) return return_err ? -ERANGE : 0; - memset(&f, 0, sizeof(f)); /* f.f_flags is used below */ - f.f_path.dentry = dentry; - rc = ll_lov_setstripe_ea_info(inode, &f, it_flags, lump, + rc = ll_lov_setstripe_ea_info(inode, dentry, it_flags, lump, lum_size); /* b=10667 */ if (!return_err) -- 1.8.3.1