LCOV - code coverage report
Current view: top level - fs/xfs - xfs_mount.c (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc4-xfsa @ Mon Jul 31 20:08:27 PDT 2023 Lines: 508 585 86.8 %
Date: 2023-07-31 20:08:27 Functions: 27 27 100.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0
       2             : /*
       3             :  * Copyright (c) 2000-2005 Silicon Graphics, Inc.
       4             :  * All Rights Reserved.
       5             :  */
       6             : #include "xfs.h"
       7             : #include "xfs_fs.h"
       8             : #include "xfs_shared.h"
       9             : #include "xfs_format.h"
      10             : #include "xfs_log_format.h"
      11             : #include "xfs_trans_resv.h"
      12             : #include "xfs_bit.h"
      13             : #include "xfs_sb.h"
      14             : #include "xfs_mount.h"
      15             : #include "xfs_inode.h"
      16             : #include "xfs_dir2.h"
      17             : #include "xfs_ialloc.h"
      18             : #include "xfs_alloc.h"
      19             : #include "xfs_rtalloc.h"
      20             : #include "xfs_bmap.h"
      21             : #include "xfs_trans.h"
      22             : #include "xfs_trans_priv.h"
      23             : #include "xfs_log.h"
      24             : #include "xfs_log_priv.h"
      25             : #include "xfs_error.h"
      26             : #include "xfs_quota.h"
      27             : #include "xfs_fsops.h"
      28             : #include "xfs_icache.h"
      29             : #include "xfs_sysfs.h"
      30             : #include "xfs_rmap_btree.h"
      31             : #include "xfs_refcount_btree.h"
      32             : #include "xfs_reflink.h"
      33             : #include "xfs_extent_busy.h"
      34             : #include "xfs_health.h"
      35             : #include "xfs_trace.h"
      36             : #include "xfs_ag.h"
      37             : #include "xfs_imeta.h"
      38             : #include "xfs_rtgroup.h"
      39             : #include "xfs_rtrmap_btree.h"
      40             : #include "xfs_rtrefcount_btree.h"
      41             : #include "scrub/stats.h"
      42             : 
      43             : static DEFINE_MUTEX(xfs_uuid_table_mutex);
      44             : static int xfs_uuid_table_size;
      45             : static uuid_t *xfs_uuid_table;
      46             : 
      47             : void
      48          12 : xfs_uuid_table_free(void)
      49             : {
      50          12 :         if (xfs_uuid_table_size == 0)
      51             :                 return;
      52          12 :         kmem_free(xfs_uuid_table);
      53          12 :         xfs_uuid_table = NULL;
      54          12 :         xfs_uuid_table_size = 0;
      55             : }
      56             : 
      57             : /*
      58             :  * See if the UUID is unique among mounted XFS filesystems.
      59             :  * Mount fails if UUID is nil or a FS with the same UUID is already mounted.
      60             :  */
      61             : STATIC int
      62       24337 : xfs_uuid_mount(
      63             :         struct xfs_mount        *mp)
      64             : {
      65       24337 :         uuid_t                  *uuid = &mp->m_sb.sb_uuid;
      66       24337 :         int                     hole, i;
      67             : 
      68             :         /* Publish UUID in struct super_block */
      69       24337 :         uuid_copy(&mp->m_super->s_uuid, uuid);
      70             : 
      71       24337 :         if (xfs_has_nouuid(mp))
      72             :                 return 0;
      73             : 
      74       24333 :         if (uuid_is_null(uuid)) {
      75           0 :                 xfs_warn(mp, "Filesystem has null UUID - can't mount");
      76           0 :                 return -EINVAL;
      77             :         }
      78             : 
      79       24333 :         mutex_lock(&xfs_uuid_table_mutex);
      80      106625 :         for (i = 0, hole = -1; i < xfs_uuid_table_size; i++) {
      81       57963 :                 if (uuid_is_null(&xfs_uuid_table[i])) {
      82       36070 :                         hole = i;
      83       36070 :                         continue;
      84             :                 }
      85       21893 :                 if (uuid_equal(uuid, &xfs_uuid_table[i]))
      86           4 :                         goto out_duplicate;
      87             :         }
      88             : 
      89       24329 :         if (hole < 0) {
      90          74 :                 xfs_uuid_table = krealloc(xfs_uuid_table,
      91          37 :                         (xfs_uuid_table_size + 1) * sizeof(*xfs_uuid_table),
      92             :                         GFP_KERNEL | __GFP_NOFAIL);
      93          37 :                 hole = xfs_uuid_table_size++;
      94             :         }
      95       24329 :         xfs_uuid_table[hole] = *uuid;
      96       24329 :         mutex_unlock(&xfs_uuid_table_mutex);
      97             : 
      98       24329 :         return 0;
      99             : 
     100             :  out_duplicate:
     101           4 :         mutex_unlock(&xfs_uuid_table_mutex);
     102           4 :         xfs_warn(mp, "Filesystem has duplicate UUID %pU - can't mount", uuid);
     103           4 :         return -EINVAL;
     104             : }
     105             : 
     106             : STATIC void
     107       24339 : xfs_uuid_unmount(
     108             :         struct xfs_mount        *mp)
     109             : {
     110       24339 :         uuid_t                  *uuid = &mp->m_sb.sb_uuid;
     111       24339 :         int                     i;
     112             : 
     113       24339 :         if (xfs_has_nouuid(mp))
     114             :                 return;
     115             : 
     116       24335 :         mutex_lock(&xfs_uuid_table_mutex);
     117       61902 :         for (i = 0; i < xfs_uuid_table_size; i++) {
     118       37567 :                 if (uuid_is_null(&xfs_uuid_table[i]))
     119       10634 :                         continue;
     120       26933 :                 if (!uuid_equal(uuid, &xfs_uuid_table[i]))
     121        2598 :                         continue;
     122       24335 :                 memset(&xfs_uuid_table[i], 0, sizeof(uuid_t));
     123       24335 :                 break;
     124             :         }
     125       24335 :         ASSERT(i < xfs_uuid_table_size);
     126       24335 :         mutex_unlock(&xfs_uuid_table_mutex);
     127             : }
     128             : 
     129             : /*
     130             :  * Check size of device based on the (data/realtime) block count.
     131             :  * Note: this check is used by the growfs code as well as mount.
     132             :  */
     133             : int
     134       49025 : xfs_sb_validate_fsb_count(
     135             :         xfs_sb_t        *sbp,
     136             :         uint64_t        nblocks)
     137             : {
     138       49025 :         ASSERT(PAGE_SHIFT >= sbp->sb_blocklog);
     139       49025 :         ASSERT(sbp->sb_blocklog >= BBSHIFT);
     140             : 
     141             :         /* Limited by ULONG_MAX of page cache index */
     142       49025 :         if (nblocks >> (PAGE_SHIFT - sbp->sb_blocklog) > ULONG_MAX)
     143             :                 return -EFBIG;
     144       49025 :         return 0;
     145             : }
     146             : 
     147             : /*
     148             :  * xfs_readsb
     149             :  *
     150             :  * Does the initial read of the superblock.
     151             :  */
     152             : int
     153       24375 : xfs_readsb(
     154             :         struct xfs_mount *mp,
     155             :         int             flags)
     156             : {
     157       24375 :         unsigned int    sector_size;
     158       24375 :         struct xfs_buf  *bp;
     159       24375 :         struct xfs_sb   *sbp = &mp->m_sb;
     160       24375 :         int             error;
     161       24375 :         int             loud = !(flags & XFS_MFSI_QUIET);
     162       24375 :         const struct xfs_buf_ops *buf_ops;
     163             : 
     164       24375 :         ASSERT(mp->m_sb_bp == NULL);
     165       24375 :         ASSERT(mp->m_ddev_targp != NULL);
     166             : 
     167             :         /*
     168             :          * For the initial read, we must guess at the sector
     169             :          * size based on the block device.  It's enough to
     170             :          * get the sb_sectsize out of the superblock and
     171             :          * then reread with the proper length.
     172             :          * We don't verify it yet, because it may not be complete.
     173             :          */
     174       24375 :         sector_size = xfs_getsize_buftarg(mp->m_ddev_targp);
     175             :         buf_ops = NULL;
     176             : 
     177             :         /*
     178             :          * Allocate a (locked) buffer to hold the superblock. This will be kept
     179             :          * around at all times to optimize access to the superblock. Therefore,
     180             :          * set XBF_NO_IOACCT to make sure it doesn't hold the buftarg count
     181             :          * elevated.
     182             :          */
     183       24375 : reread:
     184       48748 :         error = xfs_buf_read_uncached(mp->m_ddev_targp, XFS_SB_DADDR,
     185       48748 :                                       BTOBB(sector_size), XBF_NO_IOACCT, &bp,
     186             :                                       buf_ops);
     187       48748 :         if (error) {
     188          16 :                 if (loud)
     189          16 :                         xfs_warn(mp, "SB validate failed with error %d.", error);
     190             :                 /* bad CRC means corrupted metadata */
     191          16 :                 if (error == -EFSBADCRC)
     192           4 :                         error = -EFSCORRUPTED;
     193          16 :                 return error;
     194             :         }
     195             : 
     196             :         /*
     197             :          * Initialize the mount structure from the superblock.
     198             :          */
     199       48732 :         xfs_sb_from_disk(sbp, bp->b_addr);
     200             : 
     201             :         /*
     202             :          * If we haven't validated the superblock, do so now before we try
     203             :          * to check the sector size and reread the superblock appropriately.
     204             :          */
     205       48732 :         if (sbp->sb_magicnum != XFS_SB_MAGIC) {
     206           0 :                 if (loud)
     207           0 :                         xfs_warn(mp, "Invalid superblock magic number");
     208           0 :                 error = -EINVAL;
     209           0 :                 goto release_buf;
     210             :         }
     211             : 
     212             :         /*
     213             :          * We must be able to do sector-sized and sector-aligned IO.
     214             :          */
     215       48732 :         if (sector_size > sbp->sb_sectsize) {
     216           0 :                 if (loud)
     217           0 :                         xfs_warn(mp, "device supports %u byte sectors (not %u)",
     218             :                                 sector_size, sbp->sb_sectsize);
     219           0 :                 error = -ENOSYS;
     220           0 :                 goto release_buf;
     221             :         }
     222             : 
     223       48732 :         if (buf_ops == NULL) {
     224             :                 /*
     225             :                  * Re-read the superblock so the buffer is correctly sized,
     226             :                  * and properly verified.
     227             :                  */
     228       24373 :                 xfs_buf_relse(bp);
     229       24373 :                 sector_size = sbp->sb_sectsize;
     230       24373 :                 buf_ops = loud ? &xfs_sb_buf_ops : &xfs_sb_quiet_buf_ops;
     231       24373 :                 goto reread;
     232             :         }
     233             : 
     234       24359 :         mp->m_features |= xfs_sb_version_to_features(sbp);
     235       24359 :         xfs_reinit_percpu_counters(mp);
     236             : 
     237             :         /* no need to be quiet anymore, so reset the buf ops */
     238       24359 :         bp->b_ops = &xfs_sb_buf_ops;
     239             : 
     240       24359 :         mp->m_sb_bp = bp;
     241       24359 :         xfs_buf_unlock(bp);
     242       24359 :         return 0;
     243             : 
     244           0 : release_buf:
     245           0 :         xfs_buf_relse(bp);
     246           0 :         return error;
     247             : }
     248             : 
     249             : /*
     250             :  * If the sunit/swidth change would move the precomputed root inode value, we
     251             :  * must reject the ondisk change because repair will stumble over that.
     252             :  * However, we allow the mount to proceed because we never rejected this
     253             :  * combination before.  Returns true to update the sb, false otherwise.
     254             :  */
     255             : static inline int
     256          14 : xfs_check_new_dalign(
     257             :         struct xfs_mount        *mp,
     258             :         int                     new_dalign,
     259             :         bool                    *update_sb)
     260             : {
     261          14 :         struct xfs_sb           *sbp = &mp->m_sb;
     262          14 :         xfs_ino_t               calc_ino;
     263             : 
     264          14 :         calc_ino = xfs_ialloc_calc_rootino(mp, new_dalign);
     265          14 :         trace_xfs_check_new_dalign(mp, new_dalign, calc_ino);
     266             : 
     267          14 :         if (sbp->sb_rootino == calc_ino) {
     268          10 :                 *update_sb = true;
     269          10 :                 return 0;
     270             :         }
     271             : 
     272           4 :         xfs_warn(mp,
     273             : "Cannot change stripe alignment; would require moving root inode.");
     274             : 
     275             :         /*
     276             :          * XXX: Next time we add a new incompat feature, this should start
     277             :          * returning -EINVAL to fail the mount.  Until then, spit out a warning
     278             :          * that we're ignoring the administrator's instructions.
     279             :          */
     280           4 :         xfs_warn(mp, "Skipping superblock stripe alignment update.");
     281           4 :         *update_sb = false;
     282           4 :         return 0;
     283             : }
     284             : 
     285             : /*
     286             :  * If we were provided with new sunit/swidth values as mount options, make sure
     287             :  * that they pass basic alignment and superblock feature checks, and convert
     288             :  * them into the same units (FSB) that everything else expects.  This step
     289             :  * /must/ be done before computing the inode geometry.
     290             :  */
     291             : STATIC int
     292       24343 : xfs_validate_new_dalign(
     293             :         struct xfs_mount        *mp)
     294             : {
     295       24343 :         if (mp->m_dalign == 0)
     296             :                 return 0;
     297             : 
     298             :         /*
     299             :          * If stripe unit and stripe width are not multiples
     300             :          * of the fs blocksize turn off alignment.
     301             :          */
     302          22 :         if ((BBTOB(mp->m_dalign) & mp->m_blockmask) ||
     303          20 :             (BBTOB(mp->m_swidth) & mp->m_blockmask)) {
     304           2 :                 xfs_warn(mp,
     305             :         "alignment check failed: sunit/swidth vs. blocksize(%d)",
     306             :                         mp->m_sb.sb_blocksize);
     307           2 :                 return -EINVAL;
     308             :         }
     309             : 
     310             :         /*
     311             :          * Convert the stripe unit and width to FSBs.
     312             :          */
     313          20 :         mp->m_dalign = XFS_BB_TO_FSBT(mp, mp->m_dalign);
     314          20 :         if (mp->m_dalign && (mp->m_sb.sb_agblocks % mp->m_dalign)) {
     315           4 :                 xfs_warn(mp,
     316             :         "alignment check failed: sunit/swidth vs. agsize(%d)",
     317             :                         mp->m_sb.sb_agblocks);
     318           4 :                 return -EINVAL;
     319             :         }
     320             : 
     321          16 :         if (!mp->m_dalign) {
     322           0 :                 xfs_warn(mp,
     323             :         "alignment check failed: sunit(%d) less than bsize(%d)",
     324             :                         mp->m_dalign, mp->m_sb.sb_blocksize);
     325           0 :                 return -EINVAL;
     326             :         }
     327             : 
     328          16 :         mp->m_swidth = XFS_BB_TO_FSBT(mp, mp->m_swidth);
     329             : 
     330          16 :         if (!xfs_has_dalign(mp)) {
     331           0 :                 xfs_warn(mp,
     332             : "cannot change alignment: superblock does not support data alignment");
     333           0 :                 return -EINVAL;
     334             :         }
     335             : 
     336             :         return 0;
     337             : }
     338             : 
     339             : /* Update alignment values based on mount options and sb values. */
     340             : STATIC int
     341       24337 : xfs_update_alignment(
     342             :         struct xfs_mount        *mp)
     343             : {
     344       24337 :         struct xfs_sb           *sbp = &mp->m_sb;
     345             : 
     346       24337 :         if (mp->m_dalign) {
     347          16 :                 bool            update_sb;
     348          16 :                 int             error;
     349             : 
     350          16 :                 if (sbp->sb_unit == mp->m_dalign &&
     351             :                     sbp->sb_width == mp->m_swidth)
     352           6 :                         return 0;
     353             : 
     354          14 :                 error = xfs_check_new_dalign(mp, mp->m_dalign, &update_sb);
     355          14 :                 if (error || !update_sb)
     356             :                         return error;
     357             : 
     358          10 :                 sbp->sb_unit = mp->m_dalign;
     359          10 :                 sbp->sb_width = mp->m_swidth;
     360          10 :                 mp->m_update_sb = true;
     361       24321 :         } else if (!xfs_has_noalign(mp) && xfs_has_dalign(mp)) {
     362          92 :                 mp->m_dalign = sbp->sb_unit;
     363          92 :                 mp->m_swidth = sbp->sb_width;
     364             :         }
     365             : 
     366             :         return 0;
     367             : }
     368             : 
     369             : /*
     370             :  * precalculate the low space thresholds for dynamic speculative preallocation.
     371             :  */
     372             : void
     373       24460 : xfs_set_low_space_thresholds(
     374             :         struct xfs_mount        *mp)
     375             : {
     376       24460 :         uint64_t                dblocks = mp->m_sb.sb_dblocks;
     377       24460 :         uint64_t                rtexts = mp->m_sb.sb_rextents;
     378       24460 :         int                     i;
     379             : 
     380       24460 :         do_div(dblocks, 100);
     381       24460 :         do_div(rtexts, 100);
     382             : 
     383      146760 :         for (i = 0; i < XFS_LOWSP_MAX; i++) {
     384      122300 :                 mp->m_low_space[i] = dblocks * (i + 1);
     385      122300 :                 mp->m_low_rtexts[i] = rtexts * (i + 1);
     386             :         }
     387       24460 : }
     388             : 
     389             : /*
     390             :  * Check that the data (and log if separate) is an ok size.
     391             :  */
     392             : STATIC int
     393       24333 : xfs_check_sizes(
     394             :         struct xfs_mount *mp)
     395             : {
     396       24333 :         struct xfs_buf  *bp;
     397       24333 :         xfs_daddr_t     d;
     398       24333 :         int             error;
     399             : 
     400       24333 :         d = (xfs_daddr_t)XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks);
     401       24333 :         if (XFS_BB_TO_FSB(mp, d) != mp->m_sb.sb_dblocks) {
     402           0 :                 xfs_warn(mp, "filesystem size mismatch detected");
     403           0 :                 return -EFBIG;
     404             :         }
     405       24333 :         error = xfs_buf_read_uncached(mp->m_ddev_targp,
     406       24333 :                                         d - XFS_FSS_TO_BB(mp, 1),
     407             :                                         XFS_FSS_TO_BB(mp, 1), 0, &bp, NULL);
     408       24333 :         if (error) {
     409           0 :                 xfs_warn(mp, "last sector read failed");
     410           0 :                 return error;
     411             :         }
     412       24333 :         xfs_buf_relse(bp);
     413             : 
     414       24333 :         if (mp->m_logdev_targp == mp->m_ddev_targp)
     415             :                 return 0;
     416             : 
     417           2 :         d = (xfs_daddr_t)XFS_FSB_TO_BB(mp, mp->m_sb.sb_logblocks);
     418           2 :         if (XFS_BB_TO_FSB(mp, d) != mp->m_sb.sb_logblocks) {
     419           0 :                 xfs_warn(mp, "log size mismatch detected");
     420           0 :                 return -EFBIG;
     421             :         }
     422           2 :         error = xfs_buf_read_uncached(mp->m_logdev_targp,
     423           2 :                                         d - XFS_FSB_TO_BB(mp, 1),
     424             :                                         XFS_FSB_TO_BB(mp, 1), 0, &bp, NULL);
     425           2 :         if (error) {
     426           0 :                 xfs_warn(mp, "log device read failed");
     427           0 :                 return error;
     428             :         }
     429           2 :         xfs_buf_relse(bp);
     430           2 :         return 0;
     431             : }
     432             : 
     433             : /*
     434             :  * Clear the quotaflags in memory and in the superblock.
     435             :  */
     436             : int
     437          34 : xfs_mount_reset_sbqflags(
     438             :         struct xfs_mount        *mp)
     439             : {
     440          34 :         mp->m_qflags = 0;
     441             : 
     442             :         /* It is OK to look at sb_qflags in the mount path without m_sb_lock. */
     443          34 :         if (mp->m_sb.sb_qflags == 0)
     444             :                 return 0;
     445          34 :         spin_lock(&mp->m_sb_lock);
     446          34 :         mp->m_sb.sb_qflags = 0;
     447          34 :         spin_unlock(&mp->m_sb_lock);
     448             : 
     449          34 :         if (!xfs_fs_writable(mp, SB_FREEZE_WRITE))
     450             :                 return 0;
     451             : 
     452          34 :         return xfs_sync_sb(mp, false);
     453             : }
     454             : 
     455             : uint64_t
     456           4 : xfs_default_resblks(xfs_mount_t *mp)
     457             : {
     458       22102 :         uint64_t resblks;
     459             : 
     460             :         /*
     461             :          * We default to 5% or 8192 fsbs of space reserved, whichever is
     462             :          * smaller.  This is intended to cover concurrent allocation
     463             :          * transactions when we initially hit enospc. These each require a 4
     464             :          * block reservation. Hence by default we cover roughly 2000 concurrent
     465             :          * allocation reservations.
     466             :          */
     467       22102 :         resblks = mp->m_sb.sb_dblocks;
     468       22102 :         do_div(resblks, 20);
     469       22102 :         resblks = min_t(uint64_t, resblks, 8192);
     470       22102 :         return resblks;
     471             : }
     472             : 
     473             : /* Ensure the summary counts are correct. */
     474             : STATIC int
     475       24321 : xfs_check_summary_counts(
     476             :         struct xfs_mount        *mp)
     477             : {
     478       24321 :         int                     error = 0;
     479             : 
     480             :         /*
     481             :          * The AG0 superblock verifier rejects in-progress filesystems,
     482             :          * so we should never see the flag set this far into mounting.
     483             :          */
     484       24321 :         if (mp->m_sb.sb_inprogress) {
     485           0 :                 xfs_err(mp, "sb_inprogress set after log recovery??");
     486           0 :                 WARN_ON(1);
     487           0 :                 return -EFSCORRUPTED;
     488             :         }
     489             : 
     490             :         /*
     491             :          * Now the log is mounted, we know if it was an unclean shutdown or
     492             :          * not. If it was, with the first phase of recovery has completed, we
     493             :          * have consistent AG blocks on disk. We have not recovered EFIs yet,
     494             :          * but they are recovered transactionally in the second recovery phase
     495             :          * later.
     496             :          *
     497             :          * If the log was clean when we mounted, we can check the summary
     498             :          * counters.  If any of them are obviously incorrect, we can recompute
     499             :          * them from the AGF headers in the next step.
     500             :          */
     501       48642 :         if (xfs_is_clean(mp) &&
     502       25880 :             (mp->m_sb.sb_fdblocks > mp->m_sb.sb_dblocks ||
     503       12938 :              !xfs_verify_icount(mp, mp->m_sb.sb_icount) ||
     504       12938 :              mp->m_sb.sb_ifree > mp->m_sb.sb_icount)) {
     505           6 :                 xfs_fs_mark_sick(mp, XFS_SICK_FS_COUNTERS);
     506           6 :                 xfs_fs_mark_checked(mp, XFS_SICK_FS_COUNTERS);
     507             :         }
     508             : 
     509             :         /*
     510             :          * We can safely re-initialise incore superblock counters from the
     511             :          * per-ag data. These may not be correct if the filesystem was not
     512             :          * cleanly unmounted, so we waited for recovery to finish before doing
     513             :          * this.
     514             :          *
     515             :          * If the filesystem was cleanly unmounted or the previous check did
     516             :          * not flag anything weird, then we can trust the values in the
     517             :          * superblock to be correct and we don't need to do anything here.
     518             :          * Otherwise, recalculate the summary counters.
     519             :          */
     520       61578 :         if ((xfs_has_lazysbcount(mp) && !xfs_is_clean(mp)) ||
     521             :             xfs_fs_has_sickness(mp, XFS_SICK_FS_COUNTERS)) {
     522       11385 :                 error = xfs_initialize_perag_data(mp, mp->m_sb.sb_agcount);
     523       11385 :                 if (error)
     524             :                         return error;
     525             :         }
     526             : 
     527             :         /*
     528             :          * Older kernels misused sb_frextents to reflect both incore
     529             :          * reservations made by running transactions and the actual count of
     530             :          * free rt extents in the ondisk metadata.  Transactions committed
     531             :          * during runtime can therefore contain a superblock update that
     532             :          * undercounts the number of free rt extents tracked in the rt bitmap.
     533             :          * A clean unmount record will have the correct frextents value since
     534             :          * there can be no other transactions running at that point.
     535             :          *
     536             :          * If we're mounting the rt volume after recovering the log, recompute
     537             :          * frextents from the rtbitmap file to fix the inconsistency.
     538             :          */
     539       24560 :         if (xfs_has_realtime(mp) && !xfs_is_clean(mp)) {
     540           0 :                 error = xfs_rtalloc_reinit_frextents(mp);
     541           0 :                 if (error)
     542           0 :                         return error;
     543             :         }
     544             : 
     545             :         return 0;
     546             : }
     547             : 
     548             : static void
     549       24297 : xfs_unmount_check(
     550             :         struct xfs_mount        *mp)
     551             : {
     552       48594 :         if (xfs_is_shutdown(mp))
     553             :                 return;
     554             : 
     555       24902 :         if (percpu_counter_sum(&mp->m_ifree) >
     556       12451 :                         percpu_counter_sum(&mp->m_icount)) {
     557           0 :                 xfs_alert(mp, "ifree/icount mismatch at unmount");
     558           0 :                 xfs_fs_mark_sick(mp, XFS_SICK_FS_COUNTERS);
     559             :         }
     560             : }
     561             : 
     562             : /*
     563             :  * Flush and reclaim dirty inodes in preparation for unmount. Inodes and
     564             :  * internal inode structures can be sitting in the CIL and AIL at this point,
     565             :  * so we need to unpin them, write them back and/or reclaim them before unmount
     566             :  * can proceed.  In other words, callers are required to have inactivated all
     567             :  * inodes.
     568             :  *
     569             :  * An inode cluster that has been freed can have its buffer still pinned in
     570             :  * memory because the transaction is still sitting in a iclog. The stale inodes
     571             :  * on that buffer will be pinned to the buffer until the transaction hits the
     572             :  * disk and the callbacks run. Pushing the AIL will skip the stale inodes and
     573             :  * may never see the pinned buffer, so nothing will push out the iclog and
     574             :  * unpin the buffer.
     575             :  *
     576             :  * Hence we need to force the log to unpin everything first. However, log
     577             :  * forces don't wait for the discards they issue to complete, so we have to
     578             :  * explicitly wait for them to complete here as well.
     579             :  *
     580             :  * Then we can tell the world we are unmounting so that error handling knows
     581             :  * that the filesystem is going away and we should error out anything that we
     582             :  * have been retrying in the background.  This will prevent never-ending
     583             :  * retries in AIL pushing from hanging the unmount.
     584             :  *
     585             :  * Finally, we can push the AIL to clean all the remaining dirty objects, then
     586             :  * reclaim the remaining inodes that are still in memory at this point in time.
     587             :  */
     588             : static void
     589       24331 : xfs_unmount_flush_inodes(
     590             :         struct xfs_mount        *mp)
     591             : {
     592       24331 :         xfs_log_force(mp, XFS_LOG_SYNC);
     593       24331 :         xfs_extent_busy_wait_all(mp);
     594       24331 :         flush_workqueue(xfs_discard_wq);
     595             : 
     596       24331 :         set_bit(XFS_OPSTATE_UNMOUNTING, &mp->m_opstate);
     597             : 
     598       24331 :         xfs_ail_push_all_sync(mp->m_ail);
     599       24331 :         xfs_inodegc_stop(mp);
     600       24331 :         cancel_delayed_work_sync(&mp->m_reclaim_work);
     601       24331 :         xfs_reclaim_inodes(mp);
     602       24331 :         xfs_health_unmount(mp);
     603       24331 : }
     604             : 
     605             : static void
     606       24337 : xfs_mount_setup_inode_geom(
     607             :         struct xfs_mount        *mp)
     608             : {
     609       24337 :         struct xfs_ino_geometry *igeo = M_IGEO(mp);
     610             : 
     611       24337 :         igeo->attr_fork_offset = xfs_bmap_compute_attr_offset(mp);
     612       24381 :         ASSERT(igeo->attr_fork_offset < XFS_LITINO(mp));
     613             : 
     614       24337 :         xfs_ialloc_setup_geometry(mp);
     615       24337 : }
     616             : 
     617             : STATIC int
     618       24325 : xfs_mount_setup_metadir(
     619             :         struct xfs_mount        *mp)
     620             : {
     621       24325 :         int                     error;
     622             : 
     623             :         /* Load the metadata directory inode into memory. */
     624       24325 :         if (xfs_has_metadir(mp)) {
     625       23722 :                 error = xfs_imeta_iget(mp, mp->m_sb.sb_metadirino,
     626             :                                 XFS_DIR3_FT_DIR, &mp->m_metadirip);
     627       23722 :                 if (error) {
     628           4 :                         xfs_warn(mp, "Failed metadir inode init: %d", error);
     629           4 :                         return error;
     630             :                 }
     631             :         }
     632             : 
     633       24321 :         error = xfs_imeta_mount(mp);
     634       24321 :         if (error) {
     635           0 :                 xfs_warn(mp, "Failed to load metadata inode info, error %d",
     636             :                                 error);
     637           0 :                 return error;
     638             :         }
     639             : 
     640             :         return 0;
     641             : }
     642             : 
     643             : /* Compute maximum possible height for per-AG btree types for this fs. */
     644             : static inline void
     645             : xfs_agbtree_compute_maxlevels(
     646             :         struct xfs_mount        *mp)
     647             : {
     648       24337 :         unsigned int            levels;
     649             : 
     650       24337 :         levels = max(mp->m_alloc_maxlevels, M_IGEO(mp)->inobt_maxlevels);
     651       24337 :         levels = max(levels, mp->m_rmap_maxlevels);
     652       24337 :         mp->m_agbtree_maxlevels = max(levels, mp->m_refc_maxlevels);
     653             : }
     654             : 
     655             : /* Compute maximum possible height for realtime btree types for this fs. */
     656             : static inline void
     657             : xfs_rtbtree_compute_maxlevels(
     658             :         struct xfs_mount        *mp)
     659             : {
     660       24337 :         unsigned int            levels;
     661             : 
     662       24337 :         levels = max(mp->m_rtrmap_maxlevels, mp->m_rtrefc_maxlevels);
     663       24337 :         mp->m_rtbtree_maxlevels = levels;
     664             : }
     665             : 
     666             : /*
     667             :  * This function does the following on an initial mount of a file system:
     668             :  *      - reads the superblock from disk and init the mount struct
     669             :  *      - if we're a 32-bit kernel, do a size check on the superblock
     670             :  *              so we don't mount terabyte filesystems
     671             :  *      - init mount struct realtime fields
     672             :  *      - allocate inode hash table for fs
     673             :  *      - init directory manager
     674             :  *      - perform recovery and init the log manager
     675             :  */
     676             : int
     677       24343 : xfs_mountfs(
     678             :         struct xfs_mount        *mp)
     679             : {
     680       24343 :         struct xfs_sb           *sbp = &(mp->m_sb);
     681       24343 :         struct xfs_inode        *rip;
     682       24343 :         struct xfs_ino_geometry *igeo = M_IGEO(mp);
     683       24343 :         uint64_t                resblks;
     684       24343 :         uint                    quotamount = 0;
     685       24343 :         uint                    quotaflags = 0;
     686       24343 :         int                     error = 0;
     687             : 
     688       24343 :         xfs_sb_mount_common(mp, sbp);
     689             : 
     690             :         /*
     691             :          * Check for a mismatched features2 values.  Older kernels read & wrote
     692             :          * into the wrong sb offset for sb_features2 on some platforms due to
     693             :          * xfs_sb_t not being 64bit size aligned when sb_features2 was added,
     694             :          * which made older superblock reading/writing routines swap it as a
     695             :          * 64-bit value.
     696             :          *
     697             :          * For backwards compatibility, we make both slots equal.
     698             :          *
     699             :          * If we detect a mismatched field, we OR the set bits into the existing
     700             :          * features2 field in case it has already been modified; we don't want
     701             :          * to lose any features.  We then update the bad location with the ORed
     702             :          * value so that older kernels will see any features2 flags. The
     703             :          * superblock writeback code ensures the new sb_features2 is copied to
     704             :          * sb_bad_features2 before it is logged or written to disk.
     705             :          */
     706       24343 :         if (xfs_sb_has_mismatched_features2(sbp)) {
     707           4 :                 xfs_warn(mp, "correcting sb_features alignment problem");
     708           4 :                 sbp->sb_features2 |= sbp->sb_bad_features2;
     709           4 :                 mp->m_update_sb = true;
     710             :         }
     711             : 
     712             : 
     713             :         /* always use v2 inodes by default now */
     714       24343 :         if (!(mp->m_sb.sb_versionnum & XFS_SB_VERSION_NLINKBIT)) {
     715           0 :                 mp->m_sb.sb_versionnum |= XFS_SB_VERSION_NLINKBIT;
     716           0 :                 mp->m_features |= XFS_FEAT_NLINK;
     717           0 :                 mp->m_update_sb = true;
     718             :         }
     719             : 
     720             :         /*
     721             :          * If we were given new sunit/swidth options, do some basic validation
     722             :          * checks and convert the incore dalign and swidth values to the
     723             :          * same units (FSB) that everything else uses.  This /must/ happen
     724             :          * before computing the inode geometry.
     725             :          */
     726       24343 :         error = xfs_validate_new_dalign(mp);
     727       24343 :         if (error)
     728           6 :                 goto out;
     729             : 
     730       24337 :         xfs_alloc_compute_maxlevels(mp);
     731       24337 :         xfs_bmap_compute_maxlevels(mp, XFS_DATA_FORK);
     732       24337 :         xfs_bmap_compute_maxlevels(mp, XFS_ATTR_FORK);
     733       24337 :         xfs_mount_setup_inode_geom(mp);
     734       24337 :         xfs_rmapbt_compute_maxlevels(mp);
     735       24337 :         xfs_rtrmapbt_compute_maxlevels(mp);
     736       24337 :         xfs_refcountbt_compute_maxlevels(mp);
     737       24337 :         xfs_rtrefcountbt_compute_maxlevels(mp);
     738             : 
     739       24337 :         xfs_agbtree_compute_maxlevels(mp);
     740       24337 :         xfs_rtbtree_compute_maxlevels(mp);
     741             : 
     742             :         /*
     743             :          * Check if sb_agblocks is aligned at stripe boundary.  If sb_agblocks
     744             :          * is NOT aligned turn off m_dalign since allocator alignment is within
     745             :          * an ag, therefore ag has to be aligned at stripe boundary.  Note that
     746             :          * we must compute the free space and rmap btree geometry before doing
     747             :          * this.
     748             :          */
     749       24337 :         error = xfs_update_alignment(mp);
     750       24337 :         if (error)
     751           0 :                 goto out;
     752             : 
     753             :         /* enable fail_at_unmount as default */
     754       24337 :         mp->m_fail_unmount = true;
     755             : 
     756       24337 :         error = xfs_sysfs_init(&mp->m_kobj, &xfs_mp_ktype,
     757       24337 :                                NULL, mp->m_super->s_id);
     758       24337 :         if (error)
     759           0 :                 goto out;
     760             : 
     761       24337 :         error = xfs_sysfs_init(&mp->m_stats.xs_kobj, &xfs_stats_ktype,
     762             :                                &mp->m_kobj, "stats");
     763       24337 :         if (error)
     764           0 :                 goto out_remove_sysfs;
     765             : 
     766       24337 :         xchk_stats_register(mp->m_scrub_stats, mp->m_debugfs);
     767             : 
     768       24337 :         error = xfs_error_sysfs_init(mp);
     769       24337 :         if (error)
     770           0 :                 goto out_remove_scrub_stats;
     771             : 
     772       24337 :         error = xfs_errortag_init(mp);
     773       24337 :         if (error)
     774           0 :                 goto out_remove_error_sysfs;
     775             : 
     776       24337 :         error = xfs_uuid_mount(mp);
     777       24337 :         if (error)
     778           4 :                 goto out_remove_errortag;
     779             : 
     780             :         /*
     781             :          * Update the preferred write size based on the information from the
     782             :          * on-disk superblock.
     783             :          */
     784       24333 :         mp->m_allocsize_log =
     785       24333 :                 max_t(uint32_t, sbp->sb_blocklog, mp->m_allocsize_log);
     786       24333 :         mp->m_allocsize_blocks = 1U << (mp->m_allocsize_log - sbp->sb_blocklog);
     787             : 
     788             :         /* set the low space thresholds for dynamic preallocation */
     789       24333 :         xfs_set_low_space_thresholds(mp);
     790             : 
     791             :         /*
     792             :          * If enabled, sparse inode chunk alignment is expected to match the
     793             :          * cluster size. Full inode chunk alignment must match the chunk size,
     794             :          * but that is checked on sb read verification...
     795             :          */
     796       24333 :         if (xfs_has_sparseinodes(mp) &&
     797       24291 :             mp->m_sb.sb_spino_align !=
     798       24291 :                         XFS_B_TO_FSBT(mp, igeo->inode_cluster_size_raw)) {
     799           0 :                 xfs_warn(mp,
     800             :         "Sparse inode block alignment (%u) must match cluster size (%llu).",
     801             :                          mp->m_sb.sb_spino_align,
     802             :                          XFS_B_TO_FSBT(mp, igeo->inode_cluster_size_raw));
     803           0 :                 error = -EINVAL;
     804           0 :                 goto out_remove_uuid;
     805             :         }
     806             : 
     807             :         /*
     808             :          * Check that the data (and log if separate) is an ok size.
     809             :          */
     810       24333 :         error = xfs_check_sizes(mp);
     811       24333 :         if (error)
     812           0 :                 goto out_remove_uuid;
     813             : 
     814             :         /*
     815             :          * Initialize realtime fields in the mount structure
     816             :          */
     817       24333 :         error = xfs_rtmount_init(mp);
     818       24333 :         if (error) {
     819           0 :                 xfs_warn(mp, "RT mount failed");
     820           0 :                 goto out_remove_uuid;
     821             :         }
     822             : 
     823             :         /*
     824             :          *  Copies the low order bits of the timestamp and the randomly
     825             :          *  set "sequence" number out of a UUID.
     826             :          */
     827       24333 :         mp->m_fixedfsid[0] =
     828       24333 :                 (get_unaligned_be16(&sbp->sb_uuid.b[8]) << 16) |
     829       24333 :                  get_unaligned_be16(&sbp->sb_uuid.b[4]);
     830       24333 :         mp->m_fixedfsid[1] = get_unaligned_be32(&sbp->sb_uuid.b[0]);
     831             : 
     832       24333 :         error = xfs_da_mount(mp);
     833       24333 :         if (error) {
     834           0 :                 xfs_warn(mp, "Failed dir/attr init: %d", error);
     835           0 :                 goto out_remove_uuid;
     836             :         }
     837             : 
     838             :         /*
     839             :          * Initialize the precomputed transaction reservations values.
     840             :          */
     841       24333 :         xfs_trans_init(mp);
     842             : 
     843             :         /*
     844             :          * Allocate and initialize the per-ag data.
     845             :          */
     846       24333 :         error = xfs_initialize_perag(mp, sbp->sb_agcount, mp->m_sb.sb_dblocks,
     847             :                         &mp->m_maxagi);
     848       24333 :         if (error) {
     849           0 :                 xfs_warn(mp, "Failed per-ag init: %d", error);
     850           0 :                 goto out_free_dir;
     851             :         }
     852             : 
     853       24333 :         error = xfs_initialize_rtgroups(mp, sbp->sb_rgcount);
     854       24333 :         if (error) {
     855           0 :                 xfs_warn(mp, "Failed rtgroup init: %d", error);
     856           0 :                 goto out_free_perag;
     857             :         }
     858             : 
     859       24333 :         if (XFS_IS_CORRUPT(mp, !sbp->sb_logblocks)) {
     860           0 :                 xfs_warn(mp, "no log defined");
     861           0 :                 error = -EFSCORRUPTED;
     862           0 :                 goto out_free_rtgroup;
     863             :         }
     864             : 
     865       24333 :         error = xfs_inodegc_register_shrinker(mp);
     866       24333 :         if (error)
     867           0 :                 goto out_fail_wait;
     868             : 
     869             :         /*
     870             :          * Log's mount-time initialization. The first part of recovery can place
     871             :          * some items on the AIL, to be handled when recovery is finished or
     872             :          * cancelled.
     873             :          */
     874       24333 :         error = xfs_log_mount(mp, mp->m_logdev_targp,
     875       24333 :                               XFS_FSB_TO_DADDR(mp, sbp->sb_logstart),
     876       24333 :                               XFS_FSB_TO_BB(mp, sbp->sb_logblocks));
     877       24333 :         if (error) {
     878           8 :                 xfs_warn(mp, "log mount failed");
     879           8 :                 goto out_inodegc_shrinker;
     880             :         }
     881             : 
     882             :         /* Enable background inode inactivation workers. */
     883       24325 :         xfs_inodegc_start(mp);
     884       24325 :         xfs_blockgc_start(mp);
     885             : 
     886             :         /*
     887             :          * Now that we've recovered any pending superblock feature bit
     888             :          * additions, we can finish setting up the attr2 behaviour for the
     889             :          * mount. The noattr2 option overrides the superblock flag, so only
     890             :          * check the superblock feature flag if the mount option is not set.
     891             :          */
     892       24325 :         if (xfs_has_noattr2(mp)) {
     893           2 :                 mp->m_features &= ~XFS_FEAT_ATTR2;
     894       24323 :         } else if (!xfs_has_attr2(mp) &&
     895           6 :                    (mp->m_sb.sb_features2 & XFS_SB_VERSION2_ATTR2BIT)) {
     896           4 :                 mp->m_features |= XFS_FEAT_ATTR2;
     897             :         }
     898             : 
     899       24325 :         error = xfs_mount_setup_metadir(mp);
     900       24325 :         if (error)
     901           4 :                 goto out_free_metadir;
     902             : 
     903             :         /*
     904             :          * Get and sanity-check the root inode.
     905             :          * Save the pointer to it in the mount structure.
     906             :          */
     907       24321 :         error = xfs_iget(mp, NULL, sbp->sb_rootino, XFS_IGET_UNTRUSTED,
     908             :                          XFS_ILOCK_EXCL, &rip);
     909       24321 :         if (error) {
     910           0 :                 xfs_warn(mp,
     911             :                         "Failed to read root inode 0x%llx, error %d",
     912             :                         sbp->sb_rootino, -error);
     913           0 :                 goto out_free_metadir;
     914             :         }
     915             : 
     916       24321 :         ASSERT(rip != NULL);
     917             : 
     918       24321 :         if (XFS_IS_CORRUPT(mp, !S_ISDIR(VFS_I(rip)->i_mode))) {
     919           0 :                 xfs_warn(mp, "corrupted root inode %llu: not a directory",
     920             :                         (unsigned long long)rip->i_ino);
     921           0 :                 xfs_iunlock(rip, XFS_ILOCK_EXCL);
     922           0 :                 error = -EFSCORRUPTED;
     923           0 :                 goto out_rele_rip;
     924             :         }
     925       24321 :         mp->m_rootip = rip;  /* save it */
     926             : 
     927       24321 :         xfs_iunlock(rip, XFS_ILOCK_EXCL);
     928             : 
     929             :         /*
     930             :          * Initialize realtime inode pointers in the mount structure
     931             :          */
     932       24321 :         error = xfs_rtmount_inodes(mp);
     933       24321 :         if (error) {
     934             :                 /*
     935             :                  * Free up the root inode.
     936             :                  */
     937           0 :                 xfs_warn(mp, "failed to read RT inodes");
     938           0 :                 goto out_rele_rip;
     939             :         }
     940             : 
     941             :         /* Make sure the summary counts are ok. */
     942       24321 :         error = xfs_check_summary_counts(mp);
     943       24321 :         if (error)
     944           2 :                 goto out_rtunmount;
     945             : 
     946             :         /*
     947             :          * If this is a read-only mount defer the superblock updates until
     948             :          * the next remount into writeable mode.  Otherwise we would never
     949             :          * perform the update e.g. for the root filesystem.
     950             :          */
     951       24333 :         if (mp->m_update_sb && !xfs_is_readonly(mp)) {
     952          12 :                 error = xfs_sync_sb(mp, false);
     953          12 :                 if (error) {
     954           0 :                         xfs_warn(mp, "failed to write sb changes");
     955           0 :                         goto out_rtunmount;
     956             :                 }
     957             :         }
     958             : 
     959             :         /*
     960             :          * Initialise the XFS quota management subsystem for this mount
     961             :          */
     962       24319 :         if (XFS_IS_QUOTA_ON(mp)) {
     963       22322 :                 error = xfs_qm_newmount(mp, &quotamount, &quotaflags);
     964       22322 :                 if (error)
     965           4 :                         goto out_rtunmount;
     966             :         } else {
     967             :                 /*
     968             :                  * If a file system had quotas running earlier, but decided to
     969             :                  * mount without -o uquota/pquota/gquota options, revoke the
     970             :                  * quotachecked license.
     971             :                  */
     972        1997 :                 if (mp->m_sb.sb_qflags & XFS_ALL_QUOTA_ACCT) {
     973          34 :                         xfs_notice(mp, "resetting quota flags");
     974          34 :                         error = xfs_mount_reset_sbqflags(mp);
     975          34 :                         if (error)
     976           0 :                                 goto out_rtunmount;
     977             :                 }
     978             :         }
     979             : 
     980             :         /*
     981             :          * Finish recovering the file system.  This part needed to be delayed
     982             :          * until after the root and real-time bitmap inodes were consistently
     983             :          * read in.  Temporarily create per-AG space reservations for metadata
     984             :          * btree shape changes because space freeing transactions (for inode
     985             :          * inactivation) require the per-AG reservation in lieu of reserving
     986             :          * blocks.
     987             :          */
     988       24315 :         error = xfs_fs_reserve_ag_blocks(mp);
     989       24315 :         if (error && error == -ENOSPC)
     990           0 :                 xfs_warn(mp,
     991             :         "ENOSPC reserving per-AG metadata pool, log recovery may fail.");
     992       24315 :         error = xfs_log_mount_finish(mp);
     993       24315 :         xfs_fs_unreserve_ag_blocks(mp);
     994       24315 :         if (error) {
     995           2 :                 xfs_warn(mp, "log mount finish failed");
     996           2 :                 goto out_rtunmount;
     997             :         }
     998             : 
     999             :         /*
    1000             :          * Now the log is fully replayed, we can transition to full read-only
    1001             :          * mode for read-only mounts. This will sync all the metadata and clean
    1002             :          * the log so that the recovery we just performed does not have to be
    1003             :          * replayed again on the next mount.
    1004             :          *
    1005             :          * We use the same quiesce mechanism as the rw->ro remount, as they are
    1006             :          * semantically identical operations.
    1007             :          */
    1008       48626 :         if (xfs_is_readonly(mp) && !xfs_has_norecovery(mp))
    1009        2207 :                 xfs_log_clean(mp);
    1010             : 
    1011             :         /*
    1012             :          * Complete the quota initialisation, post-log-replay component.
    1013             :          */
    1014       24313 :         if (quotamount) {
    1015        3081 :                 ASSERT(mp->m_qflags == 0);
    1016        3081 :                 mp->m_qflags = quotaflags;
    1017             : 
    1018        3081 :                 error = xfs_qm_mount_quotas(mp);
    1019        3081 :                 if (error)
    1020           0 :                         goto out_rtunmount;
    1021             :         }
    1022             : 
    1023             :         /*
    1024             :          * Now we are mounted, reserve a small amount of unused space for
    1025             :          * privileged transactions. This is needed so that transaction
    1026             :          * space required for critical operations can dip into this pool
    1027             :          * when at ENOSPC. This is needed for operations like create with
    1028             :          * attr, unwritten extent conversion at ENOSPC, etc. Data allocations
    1029             :          * are not allowed to use this reserved space.
    1030             :          *
    1031             :          * This may drive us straight to ENOSPC on mount, but that implies
    1032             :          * we were already there on the last unmount. Warn if this occurs.
    1033             :          */
    1034       48626 :         if (!xfs_is_readonly(mp)) {
    1035       22098 :                 resblks = xfs_default_resblks(mp);
    1036       22098 :                 error = xfs_reserve_blocks(mp, &resblks, NULL);
    1037       22098 :                 if (error)
    1038           0 :                         xfs_warn(mp,
    1039             :         "Unable to allocate reserve blocks. Continuing without reserve pool.");
    1040             : 
    1041             :                 /* Reserve AG blocks for future btree expansion. */
    1042       22098 :                 error = xfs_fs_reserve_ag_blocks(mp);
    1043       22098 :                 if (error && error != -ENOSPC)
    1044          22 :                         goto out_agresv;
    1045             :         }
    1046             : 
    1047             :         return 0;
    1048             : 
    1049             :  out_agresv:
    1050          22 :         xfs_fs_unreserve_ag_blocks(mp);
    1051          22 :         xfs_qm_unmount_quotas(mp);
    1052          30 :  out_rtunmount:
    1053          30 :         xfs_rtunmount_inodes(mp);
    1054          30 :  out_rele_rip:
    1055          30 :         xfs_irele(rip);
    1056             :         /* Clean out dquots that might be in memory after quotacheck. */
    1057          30 :         xfs_qm_unmount(mp);
    1058          34 :  out_free_metadir:
    1059          34 :         if (mp->m_metadirip)
    1060          30 :                 xfs_imeta_irele(mp->m_metadirip);
    1061             : 
    1062             :         /*
    1063             :          * Inactivate all inodes that might still be in memory after a log
    1064             :          * intent recovery failure so that reclaim can free them.  Metadata
    1065             :          * inodes and the root directory shouldn't need inactivation, but the
    1066             :          * mount failed for some reason, so pull down all the state and flee.
    1067             :          */
    1068          34 :         xfs_inodegc_flush(mp);
    1069             : 
    1070             :         /*
    1071             :          * Flush all inode reclamation work and flush the log.
    1072             :          * We have to do this /after/ rtunmount and qm_unmount because those
    1073             :          * two will have scheduled delayed reclaim for the rt/quota inodes.
    1074             :          *
    1075             :          * This is slightly different from the unmountfs call sequence
    1076             :          * because we could be tearing down a partially set up mount.  In
    1077             :          * particular, if log_mount_finish fails we bail out without calling
    1078             :          * qm_unmount_quotas and therefore rely on qm_unmount to release the
    1079             :          * quota inodes.
    1080             :          */
    1081          34 :         xfs_unmount_flush_inodes(mp);
    1082          34 :         xfs_log_mount_cancel(mp);
    1083          42 :  out_inodegc_shrinker:
    1084          42 :         unregister_shrinker(&mp->m_inodegc_shrinker);
    1085          42 :  out_fail_wait:
    1086          42 :         if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp)
    1087           0 :                 xfs_buftarg_drain(mp->m_logdev_targp);
    1088          42 :         xfs_buftarg_drain(mp->m_ddev_targp);
    1089          42 :  out_free_rtgroup:
    1090          42 :         xfs_free_rtgroups(mp);
    1091          42 :  out_free_perag:
    1092          42 :         xfs_free_perag(mp);
    1093          42 :  out_free_dir:
    1094          42 :         xfs_da_unmount(mp);
    1095          42 :  out_remove_uuid:
    1096          42 :         xfs_uuid_unmount(mp);
    1097          46 :  out_remove_errortag:
    1098          46 :         xfs_errortag_del(mp);
    1099          46 :  out_remove_error_sysfs:
    1100          46 :         xfs_error_sysfs_del(mp);
    1101          46 :  out_remove_scrub_stats:
    1102          46 :         xchk_stats_unregister(mp->m_scrub_stats);
    1103          46 :         xfs_sysfs_del(&mp->m_stats.xs_kobj);
    1104          46 :  out_remove_sysfs:
    1105          46 :         xfs_sysfs_del(&mp->m_kobj);
    1106             :  out:
    1107             :         return error;
    1108             : }
    1109             : 
    1110             : /*
    1111             :  * This flushes out the inodes,dquots and the superblock, unmounts the
    1112             :  * log and makes sure that incore structures are freed.
    1113             :  */
    1114             : void
    1115       24297 : xfs_unmountfs(
    1116             :         struct xfs_mount        *mp)
    1117             : {
    1118       24297 :         uint64_t                resblks;
    1119       24297 :         int                     error;
    1120             : 
    1121             :         /*
    1122             :          * Perform all on-disk metadata updates required to inactivate inodes
    1123             :          * that the VFS evicted earlier in the unmount process.  Freeing inodes
    1124             :          * and discarding CoW fork preallocations can cause shape changes to
    1125             :          * the free inode and refcount btrees, respectively, so we must finish
    1126             :          * this before we discard the metadata space reservations.  Metadata
    1127             :          * inodes and the root directory do not require inactivation.
    1128             :          */
    1129       24297 :         xfs_inodegc_flush(mp);
    1130             : 
    1131       24297 :         xfs_blockgc_stop(mp);
    1132       24297 :         xfs_fs_unreserve_ag_blocks(mp);
    1133       24297 :         xfs_qm_unmount_quotas(mp);
    1134       24297 :         xfs_rtunmount_inodes(mp);
    1135       24297 :         xfs_irele(mp->m_rootip);
    1136       24297 :         if (mp->m_metadirip)
    1137       23694 :                 xfs_imeta_irele(mp->m_metadirip);
    1138             : 
    1139       24297 :         xfs_unmount_flush_inodes(mp);
    1140             : 
    1141       24297 :         xfs_qm_unmount(mp);
    1142             : 
    1143             :         /*
    1144             :          * Unreserve any blocks we have so that when we unmount we don't account
    1145             :          * the reserved free space as used. This is really only necessary for
    1146             :          * lazy superblock counting because it trusts the incore superblock
    1147             :          * counters to be absolutely correct on clean unmount.
    1148             :          *
    1149             :          * We don't bother correcting this elsewhere for lazy superblock
    1150             :          * counting because on mount of an unclean filesystem we reconstruct the
    1151             :          * correct counter value and this is irrelevant.
    1152             :          *
    1153             :          * For non-lazy counter filesystems, this doesn't matter at all because
    1154             :          * we only every apply deltas to the superblock and hence the incore
    1155             :          * value does not matter....
    1156             :          */
    1157       24297 :         resblks = 0;
    1158       24297 :         error = xfs_reserve_blocks(mp, &resblks, NULL);
    1159       24297 :         if (error)
    1160           0 :                 xfs_warn(mp, "Unable to free reserved block pool. "
    1161             :                                 "Freespace may not be correct on next mount.");
    1162       24297 :         xfs_unmount_check(mp);
    1163             : 
    1164       24297 :         xfs_log_unmount(mp);
    1165       24297 :         xfs_da_unmount(mp);
    1166       24297 :         xfs_uuid_unmount(mp);
    1167             : 
    1168             : #if defined(DEBUG)
    1169       24297 :         xfs_errortag_clearall(mp);
    1170             : #endif
    1171       24297 :         unregister_shrinker(&mp->m_inodegc_shrinker);
    1172       24297 :         xfs_free_rtgroups(mp);
    1173       24297 :         xfs_free_perag(mp);
    1174             : 
    1175       24297 :         xfs_errortag_del(mp);
    1176       24297 :         xfs_error_sysfs_del(mp);
    1177       24297 :         xchk_stats_unregister(mp->m_scrub_stats);
    1178       24297 :         xfs_sysfs_del(&mp->m_stats.xs_kobj);
    1179       24297 :         xfs_sysfs_del(&mp->m_kobj);
    1180       24297 : }
    1181             : 
    1182             : /*
    1183             :  * Determine whether modifications can proceed. The caller specifies the minimum
    1184             :  * freeze level for which modifications should not be allowed. This allows
    1185             :  * certain operations to proceed while the freeze sequence is in progress, if
    1186             :  * necessary.
    1187             :  */
    1188             : bool
    1189       12085 : xfs_fs_writable(
    1190             :         struct xfs_mount        *mp,
    1191             :         int                     level)
    1192             : {
    1193       12085 :         ASSERT(level > SB_UNFROZEN);
    1194       24145 :         if ((mp->m_super->s_writers.frozen >= level) ||
    1195       12060 :             xfs_is_shutdown(mp) || xfs_is_readonly(mp))
    1196          25 :                 return false;
    1197             : 
    1198             :         return true;
    1199             : }
    1200             : 
    1201             : /* Adjust m_fdblocks or m_frextents. */
    1202             : int
    1203  2265303188 : xfs_mod_freecounter(
    1204             :         struct xfs_mount        *mp,
    1205             :         struct percpu_counter   *counter,
    1206             :         int64_t                 delta,
    1207             :         bool                    rsvd)
    1208             : {
    1209  2265303188 :         int64_t                 lcounter;
    1210  2265303188 :         long long               res_used;
    1211  2265303188 :         uint64_t                set_aside = 0;
    1212  2265303188 :         s32                     batch;
    1213  2265303188 :         bool                    has_resv_pool;
    1214             : 
    1215  2265303188 :         ASSERT(counter == &mp->m_fdblocks || counter == &mp->m_frextents);
    1216  2265303188 :         has_resv_pool = (counter == &mp->m_fdblocks);
    1217  2265303188 :         if (rsvd)
    1218    86683357 :                 ASSERT(has_resv_pool);
    1219             : 
    1220  2265303188 :         if (delta > 0) {
    1221             :                 /*
    1222             :                  * If the reserve pool is depleted, put blocks back into it
    1223             :                  * first. Most of the time the pool is full.
    1224             :                  */
    1225  1136171537 :                 if (likely(!has_resv_pool ||
    1226             :                            mp->m_resblks == mp->m_resblks_avail)) {
    1227  1135925784 :                         percpu_counter_add(counter, delta);
    1228  1135925784 :                         return 0;
    1229             :                 }
    1230             : 
    1231      245753 :                 spin_lock(&mp->m_sb_lock);
    1232      245763 :                 res_used = (long long)(mp->m_resblks - mp->m_resblks_avail);
    1233             : 
    1234      245763 :                 if (res_used > delta) {
    1235       53605 :                         mp->m_resblks_avail += delta;
    1236             :                 } else {
    1237      192158 :                         delta -= res_used;
    1238      192158 :                         mp->m_resblks_avail = mp->m_resblks;
    1239      192158 :                         percpu_counter_add(counter, delta);
    1240             :                 }
    1241      245763 :                 spin_unlock(&mp->m_sb_lock);
    1242      245763 :                 return 0;
    1243             :         }
    1244             : 
    1245             :         /*
    1246             :          * Taking blocks away, need to be more accurate the closer we
    1247             :          * are to zero.
    1248             :          *
    1249             :          * If the counter has a value of less than 2 * max batch size,
    1250             :          * then make everything serialise as we are real close to
    1251             :          * ENOSPC.
    1252             :          */
    1253  1129131651 :         if (__percpu_counter_compare(counter, 2 * XFS_FDBLOCKS_BATCH,
    1254             :                                      XFS_FDBLOCKS_BATCH) < 0)
    1255             :                 batch = 1;
    1256             :         else
    1257  1112432923 :                 batch = XFS_FDBLOCKS_BATCH;
    1258             : 
    1259             :         /*
    1260             :          * Set aside allocbt blocks because these blocks are tracked as free
    1261             :          * space but not available for allocation. Technically this means that a
    1262             :          * single reservation cannot consume all remaining free space, but the
    1263             :          * ratio of allocbt blocks to usable free blocks should be rather small.
    1264             :          * The tradeoff without this is that filesystems that maintain high
    1265             :          * perag block reservations can over reserve physical block availability
    1266             :          * and fail physical allocation, which leads to much more serious
    1267             :          * problems (i.e. transaction abort, pagecache discards, etc.) than
    1268             :          * slightly premature -ENOSPC.
    1269             :          */
    1270  1129186990 :         if (has_resv_pool)
    1271  1003683108 :                 set_aside = xfs_fdblocks_unavailable(mp);
    1272  1129186990 :         percpu_counter_add_batch(counter, delta, batch);
    1273  1129212091 :         if (__percpu_counter_compare(counter, set_aside,
    1274             :                                      XFS_FDBLOCKS_BATCH) >= 0) {
    1275             :                 /* we had space! */
    1276             :                 return 0;
    1277             :         }
    1278             : 
    1279             :         /*
    1280             :          * lock up the sb for dipping into reserves before releasing the space
    1281             :          * that took us to ENOSPC.
    1282             :          */
    1283     9763640 :         spin_lock(&mp->m_sb_lock);
    1284     9766248 :         percpu_counter_add(counter, -delta);
    1285     9766248 :         if (!has_resv_pool || !rsvd)
    1286     9600754 :                 goto fdblocks_enospc;
    1287             : 
    1288      165494 :         lcounter = (long long)mp->m_resblks_avail + delta;
    1289      165494 :         if (lcounter >= 0) {
    1290      161389 :                 mp->m_resblks_avail = lcounter;
    1291      161389 :                 spin_unlock(&mp->m_sb_lock);
    1292      161389 :                 return 0;
    1293             :         }
    1294        4105 :         xfs_warn_once(mp,
    1295             : "Reserve blocks depleted! Consider increasing reserve pool size.");
    1296             : 
    1297     9604859 : fdblocks_enospc:
    1298     9604859 :         spin_unlock(&mp->m_sb_lock);
    1299     9604859 :         return -ENOSPC;
    1300             : }
    1301             : 
    1302             : /*
    1303             :  * Used to free the superblock along various error paths.
    1304             :  */
    1305             : void
    1306       24365 : xfs_freesb(
    1307             :         struct xfs_mount        *mp)
    1308             : {
    1309       24365 :         struct xfs_buf          *bp = mp->m_sb_bp;
    1310             : 
    1311       24365 :         xfs_buf_lock(bp);
    1312       24365 :         mp->m_sb_bp = NULL;
    1313       24365 :         xfs_buf_relse(bp);
    1314       24365 : }
    1315             : 
    1316             : /*
    1317             :  * If the underlying (data/log/rt) device is readonly, there are some
    1318             :  * operations that cannot proceed.
    1319             :  */
    1320             : int
    1321       14428 : xfs_dev_is_read_only(
    1322             :         struct xfs_mount        *mp,
    1323             :         char                    *message)
    1324             : {
    1325       28850 :         if (xfs_readonly_buftarg(mp->m_ddev_targp) ||
    1326       14422 :             xfs_readonly_buftarg(mp->m_logdev_targp) ||
    1327       14422 :             (mp->m_rtdev_targp && xfs_readonly_buftarg(mp->m_rtdev_targp))) {
    1328           6 :                 xfs_notice(mp, "%s required on read-only device.", message);
    1329           6 :                 xfs_notice(mp, "write access unavailable, cannot proceed.");
    1330           6 :                 return -EROFS;
    1331             :         }
    1332             :         return 0;
    1333             : }
    1334             : 
    1335             : /* Force the summary counters to be recalculated at next mount. */
    1336             : void
    1337      434579 : xfs_force_summary_recalc(
    1338             :         struct xfs_mount        *mp)
    1339             : {
    1340      434579 :         if (!xfs_has_lazysbcount(mp))
    1341             :                 return;
    1342             : 
    1343      434579 :         xfs_fs_mark_sick(mp, XFS_SICK_FS_COUNTERS);
    1344      434579 :         xfs_fs_mark_checked(mp, XFS_SICK_FS_COUNTERS);
    1345             : }
    1346             : 
    1347             : /*
    1348             :  * Enable a log incompat feature flag in the primary superblock.  The caller
    1349             :  * cannot have any other transactions in progress.
    1350             :  */
    1351             : int
    1352      122311 : xfs_add_incompat_log_feature(
    1353             :         struct xfs_mount        *mp,
    1354             :         uint32_t                feature)
    1355             : {
    1356      122311 :         struct xfs_dsb          *dsb;
    1357      122311 :         int                     error;
    1358             : 
    1359      244622 :         ASSERT(hweight32(feature) == 1);
    1360      122311 :         ASSERT(!(feature & XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN));
    1361             : 
    1362             :         /*
    1363             :          * Force the log to disk and kick the background AIL thread to reduce
    1364             :          * the chances that the bwrite will stall waiting for the AIL to unpin
    1365             :          * the primary superblock buffer.  This isn't a data integrity
    1366             :          * operation, so we don't need a synchronous push.
    1367             :          */
    1368      122311 :         error = xfs_log_force(mp, XFS_LOG_SYNC);
    1369      122308 :         if (error)
    1370             :                 return error;
    1371      122297 :         xfs_ail_push_all(mp->m_ail);
    1372             : 
    1373             :         /*
    1374             :          * Lock the primary superblock buffer to serialize all callers that
    1375             :          * are trying to set feature bits.
    1376             :          */
    1377      122320 :         xfs_buf_lock(mp->m_sb_bp);
    1378      122328 :         xfs_buf_hold(mp->m_sb_bp);
    1379             : 
    1380      244656 :         if (xfs_is_shutdown(mp)) {
    1381           0 :                 error = -EIO;
    1382           0 :                 goto rele;
    1383             :         }
    1384             : 
    1385      122328 :         if (xfs_sb_has_incompat_log_feature(&mp->m_sb, feature))
    1386       52610 :                 goto rele;
    1387             : 
    1388             :         /*
    1389             :          * Write the primary superblock to disk immediately, because we need
    1390             :          * the log_incompat bit to be set in the primary super now to protect
    1391             :          * the log items that we're going to commit later.
    1392             :          */
    1393       69718 :         dsb = mp->m_sb_bp->b_addr;
    1394       69718 :         xfs_sb_to_disk(dsb, &mp->m_sb);
    1395       69718 :         dsb->sb_features_log_incompat |= cpu_to_be32(feature);
    1396       69718 :         error = xfs_bwrite(mp->m_sb_bp);
    1397       69718 :         if (error)
    1398          92 :                 goto shutdown;
    1399             : 
    1400             :         /*
    1401             :          * Add the feature bits to the incore superblock before we unlock the
    1402             :          * buffer.
    1403             :          */
    1404       69626 :         xfs_sb_add_incompat_log_features(&mp->m_sb, feature);
    1405       69626 :         xfs_buf_relse(mp->m_sb_bp);
    1406             : 
    1407             :         /* Log the superblock to disk. */
    1408       69626 :         return xfs_sync_sb(mp, false);
    1409             : shutdown:
    1410          92 :         xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR);
    1411       52702 : rele:
    1412       52702 :         xfs_buf_relse(mp->m_sb_bp);
    1413       52702 :         return error;
    1414             : }
    1415             : 
    1416             : /*
    1417             :  * Clear all the log incompat flags from the superblock.
    1418             :  *
    1419             :  * The caller cannot be in a transaction, must ensure that the log does not
    1420             :  * contain any log items protected by any log incompat bit, and must ensure
    1421             :  * that there are no other threads that depend on the state of the log incompat
    1422             :  * feature flags in the primary super.
    1423             :  *
    1424             :  * Returns true if the superblock is dirty.
    1425             :  */
    1426             : bool
    1427       86701 : xfs_clear_incompat_log_features(
    1428             :         struct xfs_mount        *mp,
    1429             :         uint32_t                features)
    1430             : {
    1431       86701 :         bool                    ret = false;
    1432             : 
    1433       86701 :         if (!xfs_has_crc(mp) ||
    1434       70350 :             !xfs_sb_has_incompat_log_feature(&mp->m_sb, features) ||
    1435             :             xfs_is_shutdown(mp))
    1436             :                 return false;
    1437             : 
    1438             :         /*
    1439             :          * Update the incore superblock.  We synchronize on the primary super
    1440             :          * buffer lock to be consistent with the add function, though at least
    1441             :          * in theory this shouldn't be necessary.
    1442             :          */
    1443       60239 :         xfs_buf_lock(mp->m_sb_bp);
    1444       60239 :         xfs_buf_hold(mp->m_sb_bp);
    1445             : 
    1446       60239 :         if (xfs_sb_has_incompat_log_feature(&mp->m_sb, features)) {
    1447       60239 :                 xfs_sb_remove_incompat_log_features(&mp->m_sb, features);
    1448       60239 :                 ret = true;
    1449             :         }
    1450             : 
    1451       60239 :         xfs_buf_relse(mp->m_sb_bp);
    1452       60239 :         return ret;
    1453             : }
    1454             : 
    1455             : /*
    1456             :  * Update the in-core delayed block counter.
    1457             :  *
    1458             :  * We prefer to update the counter without having to take a spinlock for every
    1459             :  * counter update (i.e. batching).  Each change to delayed allocation
    1460             :  * reservations can change can easily exceed the default percpu counter
    1461             :  * batching, so we use a larger batch factor here.
    1462             :  *
    1463             :  * Note that we don't currently have any callers requiring fast summation
    1464             :  * (e.g. percpu_counter_read) so we can use a big batch value here.
    1465             :  */
    1466             : #define XFS_DELALLOC_BATCH      (4096)
    1467             : void
    1468    57077947 : xfs_mod_delalloc(
    1469             :         struct xfs_mount        *mp,
    1470             :         int64_t                 delta)
    1471             : {
    1472    57077947 :         percpu_counter_add_batch(&mp->m_delalloc_blks, delta,
    1473             :                         XFS_DELALLOC_BATCH);
    1474    57078078 : }

Generated by: LCOV version 1.14