Merge tag 'idmapped-mounts-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git...
[platform/kernel/linux-rpi.git] / fs / xfs / xfs_symlink.c
index 77c8ea3..1379013 100644 (file)
@@ -198,9 +198,10 @@ xfs_symlink(
                fs_blocks = xfs_symlink_blocks(mp, pathlen);
        resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks);
 
-       error = xfs_trans_alloc(mp, &M_RES(mp)->tr_symlink, resblks, 0, 0, &tp);
+       error = xfs_trans_alloc_icreate(mp, &M_RES(mp)->tr_symlink, udqp, gdqp,
+                       pdqp, resblks, &tp);
        if (error)
-               goto out_release_inode;
+               goto out_release_dquots;
 
        xfs_ilock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT);
        unlock_dp_on_error = true;
@@ -213,11 +214,8 @@ xfs_symlink(
                goto out_trans_cancel;
        }
 
-       /*
-        * Reserve disk quota : blocks and inode.
-        */
-       error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp,
-                                               pdqp, resblks, 1, 0);
+       error = xfs_iext_count_may_overflow(dp, XFS_DATA_FORK,
+                       XFS_IEXT_DIR_MANIP_CNT(mp));
        if (error)
                goto out_trans_cancel;
 
@@ -301,6 +299,7 @@ xfs_symlink(
                }
                ASSERT(pathlen == 0);
        }
+       i_size_write(VFS_I(ip), ip->i_d.di_size);
 
        /*
         * Create the directory entry for the symlink.
@@ -343,7 +342,7 @@ out_release_inode:
                xfs_finish_inode_setup(ip);
                xfs_irele(ip);
        }
-
+out_release_dquots:
        xfs_qm_dqrele(udqp);
        xfs_qm_dqrele(gdqp);
        xfs_qm_dqrele(pdqp);