]> git.ipfire.org Git - people/ms/linux.git/blobdiff - fs/xfs/xfs_fsops.c
Merge branch 'for-6.0/dax' into libnvdimm-fixes
[people/ms/linux.git] / fs / xfs / xfs_fsops.c
index d4a77c53f94ba9f875a34a4b64329e97a75226b3..13851c0d640bc8268361940ac5a7eac7b83e42e0 100644 (file)
@@ -41,6 +41,7 @@ xfs_resizefs_init_new_ags(
        xfs_agnumber_t          oagcount,
        xfs_agnumber_t          nagcount,
        xfs_rfsblock_t          delta,
+       struct xfs_perag        *last_pag,
        bool                    *lastag_extended)
 {
        struct xfs_mount        *mp = tp->t_mountp;
@@ -73,7 +74,7 @@ xfs_resizefs_init_new_ags(
 
        if (delta) {
                *lastag_extended = true;
-               error = xfs_ag_extend_space(mp, tp, id, delta);
+               error = xfs_ag_extend_space(last_pag, tp, delta);
        }
        return error;
 }
@@ -96,6 +97,7 @@ xfs_growfs_data_private(
        xfs_agnumber_t          oagcount;
        struct xfs_trans        *tp;
        struct aghdr_init_data  id = {};
+       struct xfs_perag        *last_pag;
 
        nb = in->newblocks;
        error = xfs_sb_validate_fsb_count(&mp->m_sb, nb);
@@ -128,10 +130,9 @@ xfs_growfs_data_private(
                return -EINVAL;
 
        oagcount = mp->m_sb.sb_agcount;
-
        /* allocate the new per-ag structures */
        if (nagcount > oagcount) {
-               error = xfs_initialize_perag(mp, nagcount, &nagimax);
+               error = xfs_initialize_perag(mp, nagcount, nb, &nagimax);
                if (error)
                        return error;
        } else if (nagcount < oagcount) {
@@ -145,15 +146,17 @@ xfs_growfs_data_private(
        if (error)
                return error;
 
+       last_pag = xfs_perag_get(mp, oagcount - 1);
        if (delta > 0) {
                error = xfs_resizefs_init_new_ags(tp, &id, oagcount, nagcount,
-                                                 delta, &lastag_extended);
+                               delta, last_pag, &lastag_extended);
        } else {
                xfs_warn_mount(mp, XFS_OPSTATE_WARNED_SHRINK,
        "EXPERIMENTAL online shrink feature in use. Use at your own risk!");
 
-               error = xfs_ag_shrink_space(mp, &tp, nagcount - 1, -delta);
+               error = xfs_ag_shrink_space(last_pag, &tp, -delta);
        }
+       xfs_perag_put(last_pag);
        if (error)
                goto out_trans_cancel;
 
@@ -528,6 +531,9 @@ xfs_do_force_shutdown(
        } else if (flags & SHUTDOWN_CORRUPT_INCORE) {
                tag = XFS_PTAG_SHUTDOWN_CORRUPT;
                why = "Corruption of in-memory data";
+       } else if (flags & SHUTDOWN_CORRUPT_ONDISK) {
+               tag = XFS_PTAG_SHUTDOWN_CORRUPT;
+               why = "Corruption of on-disk metadata";
        } else {
                tag = XFS_PTAG_SHUTDOWN_IOERROR;
                why = "Metadata I/O Error";