Whamcloud - gitweb
LU-9183 llite: remove struct file on stack in ll_setxattr() 93/25893/11
authorDmitry Eremin <dmitry.eremin@intel.com>
Tue, 7 Mar 2017 18:28:42 +0000 (21:28 +0300)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 16 May 2017 05:46:26 +0000 (05:46 +0000)
Backport upstream commit c139f3cef36291902d7a29a334acd25a1251cd9d

Change-Id: I3a7ddf9a2abed8692a203c4d88b9a8ecdaeb9a1a
Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-on: https://review.whamcloud.com/25893
Tested-by: Jenkins
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/llite/file.c
lustre/llite/llite_internal.h
lustre/llite/xattr.c

index 8fe18a2..7aa00c9 100644 (file)
@@ -348,10 +348,9 @@ int ll_file_release(struct inode *inode, struct file *file)
        RETURN(rc);
 }
 
        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 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;
        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;
                         * 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);
 
                         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);
 }
 
         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,
 {
        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);
        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);
 
        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);
 
 out_unlock:
        ll_inode_size_unlock(inode);
        ll_intent_release(&oit);
-       cl_lov_delay_create_clear(&file->f_flags);
 
        RETURN(rc);
 }
 
        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);
 
        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);
 
 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;
                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);
 }
        OBD_FREE(klum, lum_size);
        RETURN(rc);
 }
index f5ee50a..ec51a9a 100644 (file)
@@ -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_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,
                             int lum_size);
 int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename,
                              struct lov_mds_md **lmm, int *lmm_size,
index 9d9260b..4d42956 100644 (file)
@@ -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)) {
 
 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);
                /**
 
                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;
 
                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)
                                              lum_size);
                /* b=10667 */
                if (!return_err)