ovl: Pass argument to ovl_get_inode() in a structure
authorVivek Goyal <vgoyal@redhat.com>
Tue, 8 May 2018 13:27:21 +0000 (09:27 -0400)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 31 May 2018 09:06:12 +0000 (11:06 +0200)
ovl_get_inode() right now has 5 parameters. Soon this patch series will
add 2 more and suddenly argument list starts looking too long.

Hence pass arguments to ovl_get_inode() in a structure and it looks
little cleaner.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/export.c
fs/overlayfs/inode.c
fs/overlayfs/namei.c
fs/overlayfs/overlayfs.h

index 425a946..9941ece 100644 (file)
@@ -300,12 +300,18 @@ static struct dentry *ovl_obtain_alias(struct super_block *sb,
        struct dentry *dentry;
        struct inode *inode;
        struct ovl_entry *oe;
+       struct ovl_inode_params oip = {
+               .lowerpath = lowerpath,
+               .index = index,
+               .numlower = !!lower
+       };
 
        /* We get overlay directory dentries with ovl_lookup_real() */
        if (d_is_dir(upper ?: lower))
                return ERR_PTR(-EIO);
 
-       inode = ovl_get_inode(sb, dget(upper), lowerpath, index, !!lower);
+       oip.upperdentry = dget(upper);
+       inode = ovl_get_inode(sb, &oip);
        if (IS_ERR(inode)) {
                dput(upper);
                return ERR_CAST(inode);
index 6e3815f..2b9e837 100644 (file)
@@ -749,15 +749,17 @@ static bool ovl_hash_bylower(struct super_block *sb, struct dentry *upper,
        return true;
 }
 
-struct inode *ovl_get_inode(struct super_block *sb, struct dentry *upperdentry,
-                           struct ovl_path *lowerpath, struct dentry *index,
-                           unsigned int numlower)
+struct inode *ovl_get_inode(struct super_block *sb,
+                           struct ovl_inode_params *oip)
 {
+       struct dentry *upperdentry = oip->upperdentry;
+       struct ovl_path *lowerpath = oip->lowerpath;
        struct inode *realinode = upperdentry ? d_inode(upperdentry) : NULL;
        struct inode *inode;
        struct dentry *lowerdentry = lowerpath ? lowerpath->dentry : NULL;
-       bool bylower = ovl_hash_bylower(sb, upperdentry, lowerdentry, index);
-       int fsid = bylower ? lowerpath->layer->fsid : 0;
+       bool bylower = ovl_hash_bylower(sb, upperdentry, lowerdentry,
+                                       oip->index);
+       int fsid = bylower ? oip->lowerpath->layer->fsid : 0;
        bool is_dir;
        unsigned long ino = 0;
 
@@ -774,8 +776,8 @@ struct inode *ovl_get_inode(struct super_block *sb, struct dentry *upperdentry,
                                                      upperdentry);
                unsigned int nlink = is_dir ? 1 : realinode->i_nlink;
 
-               inode = iget5_locked(sb, (unsigned long) key,
-                                    ovl_inode_test, ovl_inode_set, key);
+               inode = iget5_locked(sb, (unsigned long) key, ovl_inode_test,
+                                    ovl_inode_set, key);
                if (!inode)
                        goto out_nomem;
                if (!(inode->i_state & I_NEW)) {
@@ -811,12 +813,12 @@ struct inode *ovl_get_inode(struct super_block *sb, struct dentry *upperdentry,
        if (upperdentry && ovl_is_impuredir(upperdentry))
                ovl_set_flag(OVL_IMPURE, inode);
 
-       if (index)
+       if (oip->index)
                ovl_set_flag(OVL_INDEX, inode);
 
        /* Check for non-merge dir that may have whiteouts */
        if (is_dir) {
-               if (((upperdentry && lowerdentry) || numlower > 1) ||
+               if (((upperdentry && lowerdentry) || oip->numlower > 1) ||
                    ovl_check_origin_xattr(upperdentry ?: lowerdentry)) {
                        ovl_set_flag(OVL_WHITEOUTS, inode);
                }
index 2dba29e..08801b4 100644 (file)
@@ -1004,8 +1004,14 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
                upperdentry = dget(index);
 
        if (upperdentry || ctr) {
-               inode = ovl_get_inode(dentry->d_sb, upperdentry, stack, index,
-                                     ctr);
+               struct ovl_inode_params oip = {
+                       .upperdentry = upperdentry,
+                       .lowerpath = stack,
+                       .index = index,
+                       .numlower = ctr,
+               };
+
+               inode = ovl_get_inode(dentry->d_sb, &oip);
                err = PTR_ERR(inode);
                if (IS_ERR(inode))
                        goto out_free_oe;
index 3f13d09..b8a0160 100644 (file)
@@ -328,12 +328,17 @@ int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags);
 int ovl_update_time(struct inode *inode, struct timespec *ts, int flags);
 bool ovl_is_private_xattr(const char *name);
 
+struct ovl_inode_params {
+       struct dentry *upperdentry;
+       struct ovl_path *lowerpath;
+       struct dentry *index;
+       unsigned int numlower;
+};
 struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, dev_t rdev);
 struct inode *ovl_lookup_inode(struct super_block *sb, struct dentry *real,
                               bool is_upper);
-struct inode *ovl_get_inode(struct super_block *sb, struct dentry *upperdentry,
-                           struct ovl_path *lowerpath, struct dentry *index,
-                           unsigned int numlower);
+struct inode *ovl_get_inode(struct super_block *sb,
+                           struct ovl_inode_params *oip);
 static inline void ovl_copyattr(struct inode *from, struct inode *to)
 {
        to->i_uid = from->i_uid;