struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        unsigned int ia_valid = attr->ia_valid;
 
-       i_uid_update(mnt_userns, attr, inode);
-       i_gid_update(mnt_userns, attr, inode);
+       i_uid_update(idmap, attr, inode);
+       i_gid_update(idmap, attr, inode);
        if (ia_valid & ATTR_ATIME)
                inode->i_atime = attr->ia_atime;
        if (ia_valid & ATTR_MTIME)
 
        int orphan = 0;
        const unsigned int ia_valid = attr->ia_valid;
        bool inc_ivers = true;
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
 
        if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
                return -EIO;
                        return error;
        }
 
-       if (i_uid_needs_update(mnt_userns, attr, inode) ||
-           i_gid_needs_update(mnt_userns, attr, inode)) {
+       if (i_uid_needs_update(idmap, attr, inode) ||
+           i_gid_needs_update(idmap, attr, inode)) {
                handle_t *handle;
 
                /* (user+group)*(old+new) structure, inode write (sb,
                }
                /* Update corresponding info in inode so that everything is in
                 * one transaction */
-               i_uid_update(mnt_userns, attr, inode);
-               i_gid_update(mnt_userns, attr, inode);
+               i_uid_update(idmap, attr, inode);
+               i_gid_update(idmap, attr, inode);
                error = ext4_mark_inode_dirty(handle, inode);
                ext4_journal_stop(handle);
                if (unlikely(error)) {
 
        unsigned int ia_valid = attr->ia_valid;
        struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
 
-       i_uid_update(mnt_userns, attr, inode);
-       i_gid_update(mnt_userns, attr, inode);
+       i_uid_update(idmap, attr, inode);
+       i_gid_update(idmap, attr, inode);
        if (ia_valid & ATTR_ATIME)
                inode->i_atime = attr->ia_atime;
        if (ia_valid & ATTR_MTIME)
 int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
                 struct iattr *attr)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct inode *inode = d_inode(dentry);
        int err;
 
                if (err)
                        return err;
        }
-       if (i_uid_needs_update(mnt_userns, attr, inode) ||
-           i_gid_needs_update(mnt_userns, attr, inode)) {
+       if (i_uid_needs_update(idmap, attr, inode) ||
+           i_gid_needs_update(idmap, attr, inode)) {
                f2fs_lock_op(F2FS_I_SB(inode));
                err = dquot_transfer(idmap, inode, attr);
                if (err) {
                 * update uid/gid under lock_op(), so that dquot and inode can
                 * be updated atomically.
                 */
-               i_uid_update(mnt_userns, attr, inode);
-               i_gid_update(mnt_userns, attr, inode);
+               i_uid_update(idmap, attr, inode);
+               i_gid_update(idmap, attr, inode);
                f2fs_mark_inode_dirty_sync(inode, true);
                f2fs_unlock_op(F2FS_I_SB(inode));
        }
 
        if (!dquot_active(inode))
                return 0;
 
-       if (i_uid_needs_update(mnt_userns, iattr, inode)) {
+       if (i_uid_needs_update(idmap, iattr, inode)) {
                kuid_t kuid = from_vfsuid(mnt_userns, i_user_ns(inode),
                                          iattr->ia_vfsuid);
 
                }
                transfer_to[USRQUOTA] = dquot;
        }
-       if (i_gid_needs_update(mnt_userns, iattr, inode)) {
+       if (i_gid_needs_update(idmap, iattr, inode)) {
                kgid_t kgid = from_vfsgid(mnt_userns, i_user_ns(inode),
                                          iattr->ia_vfsgid);
 
 
         * also.
         */
        if (XFS_IS_UQUOTA_ON(mp) &&
-           i_uid_needs_update(mnt_userns, iattr, inode)) {
+           i_uid_needs_update(idmap, iattr, inode)) {
                ASSERT(udqp);
                old_udqp = xfs_qm_vop_chown(tp, ip, &ip->i_udquot, udqp);
        }
        if (XFS_IS_GQUOTA_ON(mp) &&
-           i_gid_needs_update(mnt_userns, iattr, inode)) {
+           i_gid_needs_update(idmap, iattr, inode)) {
                ASSERT(xfs_has_pquotino(mp) || !XFS_IS_PQUOTA_ON(mp));
                ASSERT(gdqp);
                old_gdqp = xfs_qm_vop_chown(tp, ip, &ip->i_gdquot, gdqp);
 
 
 /**
  * i_uid_needs_update - check whether inode's i_uid needs to be updated
- * @mnt_userns: user namespace of the mount the inode was found from
+ * @idmap: idmap of the mount the inode was found from
  * @attr: the new attributes of @inode
  * @inode: the inode to update
  *
  *
  * Return: true if @inode's i_uid field needs to be updated, false if not.
  */
-static inline bool i_uid_needs_update(struct user_namespace *mnt_userns,
+static inline bool i_uid_needs_update(struct mnt_idmap *idmap,
                                      const struct iattr *attr,
                                      const struct inode *inode)
 {
+       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
+
        return ((attr->ia_valid & ATTR_UID) &&
                !vfsuid_eq(attr->ia_vfsuid,
                           i_uid_into_vfsuid(mnt_userns, inode)));
 
 /**
  * i_uid_update - update @inode's i_uid field
- * @mnt_userns: user namespace of the mount the inode was found from
+ * @idmap: idmap of the mount the inode was found from
  * @attr: the new attributes of @inode
  * @inode: the inode to update
  *
  * Safely update @inode's i_uid field translating the vfsuid of any idmapped
  * mount into the filesystem kuid.
  */
-static inline void i_uid_update(struct user_namespace *mnt_userns,
+static inline void i_uid_update(struct mnt_idmap *idmap,
                                const struct iattr *attr,
                                struct inode *inode)
 {
+       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
+
        if (attr->ia_valid & ATTR_UID)
                inode->i_uid = from_vfsuid(mnt_userns, i_user_ns(inode),
                                           attr->ia_vfsuid);
 
 /**
  * i_gid_needs_update - check whether inode's i_gid needs to be updated
- * @mnt_userns: user namespace of the mount the inode was found from
+ * @idmap: idmap of the mount the inode was found from
  * @attr: the new attributes of @inode
  * @inode: the inode to update
  *
  *
  * Return: true if @inode's i_gid field needs to be updated, false if not.
  */
-static inline bool i_gid_needs_update(struct user_namespace *mnt_userns,
+static inline bool i_gid_needs_update(struct mnt_idmap *idmap,
                                      const struct iattr *attr,
                                      const struct inode *inode)
 {
+       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
+
        return ((attr->ia_valid & ATTR_GID) &&
                !vfsgid_eq(attr->ia_vfsgid,
                           i_gid_into_vfsgid(mnt_userns, inode)));
 
 /**
  * i_gid_update - update @inode's i_gid field
- * @mnt_userns: user namespace of the mount the inode was found from
+ * @idmap: idmap of the mount the inode was found from
  * @attr: the new attributes of @inode
  * @inode: the inode to update
  *
  * Safely update @inode's i_gid field translating the vfsgid of any idmapped
  * mount into the filesystem kgid.
  */
-static inline void i_gid_update(struct user_namespace *mnt_userns,
+static inline void i_gid_update(struct mnt_idmap *idmap,
                                const struct iattr *attr,
                                struct inode *inode)
 {
+       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
+
        if (attr->ia_valid & ATTR_GID)
                inode->i_gid = from_vfsgid(mnt_userns, i_user_ns(inode),
                                           attr->ia_vfsgid);
 
 static inline bool is_quota_modification(struct mnt_idmap *idmap,
                                         struct inode *inode, struct iattr *ia)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        return ((ia->ia_valid & ATTR_SIZE) ||
-               i_uid_needs_update(mnt_userns, ia, inode) ||
-               i_gid_needs_update(mnt_userns, ia, inode));
+               i_uid_needs_update(idmap, ia, inode) ||
+               i_gid_needs_update(idmap, ia, inode));
 }
 
 #if defined(CONFIG_QUOTA)
 
                           struct dentry *dentry, struct iattr *attr)
 {
        struct inode *inode = d_backing_inode(dentry);
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        unsigned int ia_valid = attr->ia_valid;
 
-       if (!i_uid_needs_update(mnt_userns, attr, inode) &&
-           !i_gid_needs_update(mnt_userns, attr, inode) &&
+       if (!i_uid_needs_update(idmap, attr, inode) &&
+           !i_gid_needs_update(idmap, attr, inode) &&
            (!(ia_valid & ATTR_MODE) || attr->ia_mode == inode->i_mode))
                return 0;