1. 22 Dec, 2023 11 commits
  2. 16 Dec, 2023 6 commits
    • Chandan Babu R's avatar
      Merge tag 'repair-quota-6.8_2023-12-15' of... · 98bdbf60
      Chandan Babu R authored
      Merge tag 'repair-quota-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.8-mergeB
      
      xfs: online repair of quota and rt metadata files
      
      XFS stores quota records and free space bitmap information in files.
      Add the necessary infrastructure to enable repairing metadata inodes and
      their forks, and then make it so that we can repair the file metadata
      for the rtbitmap.  Repairing the bitmap contents (and the summary file)
      is left for subsequent patchsets.
      
      We also add the ability to repair file metadata the quota files.  As
      part of these repairs, we also reinitialize the ondisk dquot records as
      necessary to get the incore dquots working.  We can also correct
      obviously bad dquot record attributes, but we leave checking the
      resource usage counts for the next patchsets.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
      
      * tag 'repair-quota-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux:
        xfs: repair quotas
        xfs: improve dquot iteration for scrub
        xfs: check dquot resource timers
        xfs: check the ondisk space mapping behind a dquot
      98bdbf60
    • Chandan Babu R's avatar
      Merge tag 'repair-rtbitmap-6.8_2023-12-15' of... · 5bb4ad95
      Chandan Babu R authored
      Merge tag 'repair-rtbitmap-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.8-mergeB
      
      xfs: online repair of rt bitmap file
      
      Add in the necessary infrastructure to check the inode and data forks of
      metadata files, then apply that to the realtime bitmap file.  We won't
      be able to reconstruct the contents of the rtbitmap file until rmapbt is
      added for realtime volumes, but we can at least get the basics started.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
      
      * tag 'repair-rtbitmap-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux:
        xfs: online repair of realtime bitmaps
        xfs: create a new inode fork block unmap helper
        xfs: repair the inode core and forks of a metadata inode
        xfs: always check the rtbitmap and rtsummary files
        xfs: check rt summary file geometry more thoroughly
        xfs: check rt bitmap file geometry more thoroughly
      5bb4ad95
    • Chandan Babu R's avatar
      Merge tag 'repair-file-mappings-6.8_2023-12-15' of... · 98e63b91
      Chandan Babu R authored
      Merge tag 'repair-file-mappings-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.8-mergeB
      
      xfs: online repair of file fork mappings
      
      In this series, online repair gains the ability to rebuild data and attr
      fork mappings from the reverse mapping information.  It is at this point
      where we reintroduce the ability to reap file extents.
      
      Repair of CoW forks is a little different -- on disk, CoW staging
      extents are owned by the refcount btree and cannot be mapped back to
      individual files.  Hence we can only detect staging extents that don't
      quite look right (missing reverse mappings, shared staging extents) and
      replace them with fresh allocations.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
      
      * tag 'repair-file-mappings-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux:
        xfs: repair problems in CoW forks
        xfs: create a ranged query function for refcount btrees
        xfs: refactor repair forcing tests into a repair.c helper
        xfs: repair inode fork block mapping data structures
        xfs: reintroduce reaping of file metadata blocks to xrep_reap_extents
      98e63b91
    • Chandan Babu R's avatar
      Merge tag 'repair-inodes-6.8_2023-12-15' of... · 7b63ce86
      Chandan Babu R authored
      Merge tag 'repair-inodes-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.8-mergeB
      
      xfs: online repair of inodes and forks
      
      In this series, online repair gains the ability to repair inode records.
      To do this, we must repair the ondisk inode and fork information enough
      to pass the iget verifiers and hence make the inode igettable again.
      Once that's done, we can perform higher level repairs on the incore
      inode.  The fstests counterpart of this patchset implements stress
      testing of repair.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
      
      * tag 'repair-inodes-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux:
        xfs: skip the rmapbt search on an empty attr fork unless we know it was zapped
        xfs: abort directory parent scrub scans if we encounter a zapped directory
        xfs: zap broken inode forks
        xfs: repair inode records
        xfs: set inode sick state flags when we zap either ondisk fork
        xfs: dont cast to char * for XFS_DFORK_*PTR macros
        xfs: add missing nrext64 inode flag check to scrub
        xfs: try to attach dquots to files before repairing them
        xfs: disable online repair quota helpers when quota not enabled
      7b63ce86
    • Chandan Babu R's avatar
      Merge tag 'repair-ag-btrees-6.8_2023-12-15' of... · 6e1d7b89
      Chandan Babu R authored
      Merge tag 'repair-ag-btrees-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.8-mergeB
      
      xfs: online repair of AG btrees
      
      Now that we've spent a lot of time reworking common code in online fsck,
      we're ready to start rebuilding the AG space btrees.  This series
      implements repair functions for the free space, inode, and refcount
      btrees.  Rebuilding the reverse mapping btree is much more intense and
      is left for a subsequent patchset.  The fstests counterpart of this
      patchset implements stress testing of repair.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
      
      * tag 'repair-ag-btrees-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux:
        xfs: repair refcount btrees
        xfs: repair inode btrees
        xfs: repair free space btrees
        xfs: remove trivial bnobt/inobt scrub helpers
        xfs: roll the scrub transaction after completing a repair
        xfs: move the per-AG datatype bitmaps to separate files
        xfs: create separate structures and code for u32 bitmaps
      6e1d7b89
    • Chandan Babu R's avatar
      Merge tag 'repair-prep-for-bulk-loading-6.8_2023-12-15' of... · 5e60ca3f
      Chandan Babu R authored
      Merge tag 'repair-prep-for-bulk-loading-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.8-mergeB
      
      xfs: prepare repair for bulk loading
      
      Before we start merging the online repair functions, let's improve the
      bulk loading code a bit.  First, we need to fix a misinteraction between
      the AIL and the btree bulkloader wherein the delwri at the end of the
      bulk load fails to queue a buffer for writeback if it happens to be on
      the AIL list.
      
      Second, we introduce a defer ops barrier object so that the process of
      reaping blocks after a repair cannot queue more than two extents per EFI
      log item.  This increases our exposure to leaking blocks if the system
      goes down during a reap, but also should prevent transaction overflows,
      which result in the system going down.
      
      Third, we change the bulkloader itself to copy multiple records into a
      block if possible, and add some debugging knobs so that developers can
      control the slack factors, just like they can do for xfs_repair.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
      
      * tag 'repair-prep-for-bulk-loading-6.8_2023-12-15' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux:
        xfs: constrain dirty buffers while formatting a staged btree
        xfs: move btree bulkload record initialization to ->get_record implementations
        xfs: add debug knobs to control btree bulk load slack factors
        xfs: read leaf blocks when computing keys for bulkloading into node blocks
        xfs: set XBF_DONE on newly formatted btree block that are ready for writing
        xfs: force all buffers to be written during btree bulk load
      5e60ca3f
  3. 15 Dec, 2023 23 commits
    • Darrick J. Wong's avatar
      xfs: repair quotas · a5b91555
      Darrick J. Wong authored
      Fix anything that causes the quota verifiers to fail.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      a5b91555
    • Darrick J. Wong's avatar
      xfs: improve dquot iteration for scrub · 21d75009
      Darrick J. Wong authored
      Upon a closer inspection of the quota record scrubber, I noticed that
      dqiterate wasn't actually walking all possible dquots for the mapped
      blocks in the quota file.  This is due to xfs_qm_dqget_next skipping all
      XFS_IS_DQUOT_UNINITIALIZED dquots.
      
      For a fsck program, we really want to look at all the dquots, even if
      all counters and limits in the dquot record are zero.  Rewrite the
      implementation to do this, as well as switching to an iterator paradigm
      to reduce the number of indirect calls.
      
      This enables removal of the old broken dqiterate code from xfs_dquot.c.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      21d75009
    • Darrick J. Wong's avatar
      xfs: check dquot resource timers · 774b5c0a
      Darrick J. Wong authored
      For each dquot resource, ensure either (a) the resource usage is over
      the soft limit and there is a nonzero timer; or (b) usage is at or under
      the soft limit and the timer is unset.  (a) is redundant with the dquot
      buffer verifier, but (b) isn't checked anywhere.
      
      Found by fuzzing xfs/426 and noticing that diskdq.btimer = add didn't
      trip any kind of warning for having a timer set even with no limits.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      774b5c0a
    • Darrick J. Wong's avatar
      xfs: check the ondisk space mapping behind a dquot · 7d1f0e16
      Darrick J. Wong authored
      Each xfs_dquot object caches the file offset and daddr of the ondisk
      block that backs the dquot.  Make sure these cached values are the same
      as the bmapi data, and that the block state is written.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      7d1f0e16
    • Darrick J. Wong's avatar
      xfs: online repair of realtime bitmaps · ffd37b22
      Darrick J. Wong authored
      Fix all the file metadata surrounding the realtime bitmap file, which
      includes the rt geometry, file size, forks, and space mappings.  The
      bitmap contents themselves cannot be fixed without rt rmap, so that will
      come later.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      ffd37b22
    • Darrick J. Wong's avatar
      xfs: create a new inode fork block unmap helper · a59eb5fc
      Darrick J. Wong authored
      Create a new helper to unmap blocks from an inode's fork.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      a59eb5fc
    • Darrick J. Wong's avatar
      xfs: repair the inode core and forks of a metadata inode · 5a8e07e7
      Darrick J. Wong authored
      Add a helper function to repair the core and forks of a metadata inode,
      so that we can get move onto the task of repairing higher level metadata
      that lives in an inode.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      5a8e07e7
    • Darrick J. Wong's avatar
      xfs: always check the rtbitmap and rtsummary files · 20cc0d39
      Darrick J. Wong authored
      XFS filesystems always have a realtime bitmap and summary file, even if
      there has never been a realtime volume attached.  Always check them.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      20cc0d39
    • Darrick J. Wong's avatar
      xfs: check rt summary file geometry more thoroughly · 04f0c326
      Darrick J. Wong authored
      I forgot that the xfs_mount tracks the size and number of levels in the
      realtime summary file, and that the rt summary file can have more blocks
      mapped to the data fork than m_rsumsize implies if growfsrt fails.
      
      So.  Add to the rtsummary scrubber an explicit check that all the
      summary geometry values are correct, then adjust the rtsummary i_size
      checks to allow for the growfsrt failure case.  Finally, flag post-eof
      blocks in the summary file.
      
      While we're at it, split the extent map checking so that we only call
      xfs_bmapi_read once per extent instead of once per rtsummary block.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      04f0c326
    • Darrick J. Wong's avatar
      xfs: check rt bitmap file geometry more thoroughly · 41991cf2
      Darrick J. Wong authored
      I forgot that the superblock tracks the number of blocks that are in the
      realtime bitmap, and that the rt bitmap file can have more blocks mapped
      to the data fork than sb_rbmblocks if growfsrt fails.
      
      So.  Add to the rtbitmap scrubber an explicit check that sb_rextents and
      sb_rbmblocks are correct, then adjust the rtbitmap i_size checks to
      allow for the growfsrt failure case.  Finally, flag post-eof blocks in
      the rtbitmap.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      41991cf2
    • Darrick J. Wong's avatar
      xfs: repair problems in CoW forks · dbbdbd00
      Darrick J. Wong authored
      Try to repair errors that we see in file CoW forks so that we don't do
      stupid things like remap garbage into a file.  There's not a lot we can
      do with the COW fork -- the ondisk metadata record only that the COW
      staging extents are owned by the refcount btree, which effectively means
      that we can't reconstruct this incore structure from scratch.
      
      Actually, this is even worse -- we can't touch written extents, because
      those map space that are actively under writeback, and there's not much
      to do with delalloc reservations.  Hence we can only detect crosslinked
      unwritten extents and fix them by punching out the problematic parts and
      replacing them with delalloc extents.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      dbbdbd00
    • Darrick J. Wong's avatar
      xfs: create a ranged query function for refcount btrees · d12bf8ba
      Darrick J. Wong authored
      Implement ranged queries for refcount records.  The next patch will use
      this to scan refcount data.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      d12bf8ba
    • Darrick J. Wong's avatar
      xfs: refactor repair forcing tests into a repair.c helper · 48a72f60
      Darrick J. Wong authored
      There are a couple of conditions that userspace can set to force repairs
      of metadata.  These really belong in the repair code and not open-coded
      into the check code, so refactor them into a helper.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      48a72f60
    • Darrick J. Wong's avatar
      xfs: repair inode fork block mapping data structures · 8f71bede
      Darrick J. Wong authored
      Use the reverse-mapping btree information to rebuild an inode block map.
      Update the btree bulk loading code as necessary to support inode rooted
      btrees and fix some bitrot problems.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      8f71bede
    • Darrick J. Wong's avatar
      xfs: skip the rmapbt search on an empty attr fork unless we know it was zapped · c3a22c2e
      Darrick J. Wong authored
      The attribute fork scrubber can optionally scan the reverse mapping
      records of the filesystem to determine if the fork is missing mappings
      that it should have.  However, this is a very expensive operation, so we
      only want to do this if we suspect that the fork is missing records.
      For attribute forks the criteria for suspicion is that the attr fork is
      in EXTENTS format and has zero extents.
      
      However, there are several ways that a file can end up in this state
      through regular filesystem usage.  For example, an LSM can set a
      s_security hook but then decide not to set an ACL; or an attr set can
      create the attr fork but then the actual set operation fails with
      ENOSPC; or we can delete all the attrs on a file whose data fork is in
      btree format, in which case we do not delete the attr fork.  We don't
      want to run the expensive check for any case that can be arrived at
      through regular operations.
      
      However.
      
      When online inode repair decides to zap an attribute fork, it cannot
      determine if it is zapping ACL information.  As a precaution it removes
      all the discretionary access control permissions and sets the user and
      group ids to zero.  Check these three additional conditions to decide if
      we want to scan the rmap records.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      c3a22c2e
    • Darrick J. Wong's avatar
      xfs: reintroduce reaping of file metadata blocks to xrep_reap_extents · 66da1128
      Darrick J. Wong authored
      Back in commit a55e0730 ("xfs: only allow reaping of per-AG
      blocks in xrep_reap_extents"), we removed from the reaping code the
      ability to handle bmbt blocks.  At the time, the reaping code only
      walked single blocks, didn't correctly detect crosslinked blocks, and
      the special casing made the function hard to understand.  It was easier
      to remove unneeded functionality prior to fixing all the bugs.
      
      Now that we've fixed the problems, we want again the ability to reap
      file metadata blocks.  Reintroduce the per-file reaping functionality
      atop the current implementation.  We require that sc->sa is
      uninitialized, so that we can use it to hold all the per-AG context for
      a given extent.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      66da1128
    • Darrick J. Wong's avatar
      xfs: abort directory parent scrub scans if we encounter a zapped directory · 6c728952
      Darrick J. Wong authored
      In a previous patch, we added some code to perform sufficient repairs
      to an ondisk inode record such that the inode cache would be willing to
      load the inode.  If the broken inode was a shortform directory, it will
      reset the directory to something plausible, which is to say an empty
      subdirectory of the root.  The telltale signs that something is
      seriously wrong is the broken link count.
      
      Such directories look clean, but they shouldn't participate in a
      filesystem scan to find or confirm a directory parent pointer.  Create a
      predicate that identifies such directories and abort the scrub.
      
      Found by fuzzing xfs/1554 with multithreaded xfs_scrub enabled and
      u3.bmx[0].startblock = zeroes.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      6c728952
    • Darrick J. Wong's avatar
      xfs: zap broken inode forks · e744cef2
      Darrick J. Wong authored
      Determine if inode fork damage is responsible for the inode being unable
      to pass the ifork verifiers in xfs_iget and zap the fork contents if
      this is true.  Once this is done the fork will be empty but we'll be
      able to construct an in-core inode, and a subsequent call to the inode
      fork repair ioctl will search the rmapbt to rebuild the records that
      were in the fork.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      e744cef2
    • Darrick J. Wong's avatar
      xfs: repair inode records · 2d295fe6
      Darrick J. Wong authored
      If an inode is so badly damaged that it cannot be loaded into the cache,
      fix the ondisk metadata and try again.  If there /is/ a cached inode,
      fix any problems and apply any optimizations that can be solved incore.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      2d295fe6
    • Darrick J. Wong's avatar
      xfs: set inode sick state flags when we zap either ondisk fork · d9041681
      Darrick J. Wong authored
      In a few patches, we'll add some online repair code that tries to
      massage the ondisk inode record just enough to get it to pass the inode
      verifiers so that we can continue with more file repairs.  Part of that
      massaging can include zapping the ondisk forks to clear errors.  After
      that point, the bmap fork repair functions will rebuild the zapped
      forks.
      
      Christoph asked for stronger protections against online repair zapping a
      fork to get the inode to load vs. other threads trying to access the
      partially repaired file.  Do this by adding a special "[DA]FORK_ZAPPED"
      inode health flag whenever repair zaps a fork, and sprinkling checks for
      that flag into the various file operations for things that don't like
      handling an unexpected zero-extents fork.
      
      In practice xfs_scrub will scrub and fix the forks almost immediately
      after zapping them, so the window is very small.  However, if a crash or
      unmount should occur, we can still detect these zapped inode forks by
      looking for a zero-extents fork when data was expected.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      d9041681
    • Darrick J. Wong's avatar
      xfs: dont cast to char * for XFS_DFORK_*PTR macros · 6b5d9177
      Darrick J. Wong authored
      Code in the next patch will assign the return value of XFS_DFORK_*PTR
      macros to a struct pointer.  gcc complains about casting char* strings
      to struct pointers, so let's fix the macro's cast to void* to shut up
      the warnings.
      
      While we're at it, fix one of the scrub tests that uses PTR to use BOFF
      instead for a simpler integer comparison, since other linters whine
      about char* and void* comparisons.
      
      Can't satisfy all these dman bots.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      6b5d9177
    • Darrick J. Wong's avatar
      xfs: add missing nrext64 inode flag check to scrub · 576d30ec
      Darrick J. Wong authored
      Add this missing check that the superblock nrext64 flag is set if the
      inode flag is set.
      
      Fixes: 9b7d16e3 ("xfs: Introduce XFS_DIFLAG2_NREXT64 and associated helpers")
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      576d30ec
    • Darrick J. Wong's avatar
      xfs: try to attach dquots to files before repairing them · 259ba1d3
      Darrick J. Wong authored
      Inode resource usage is tracked in the quota metadata.  Repairing a file
      might change the resources used by that file, which means that we need
      to attach dquots to the file that we're examining before accessing
      anything in the file protected by the ILOCK.
      
      However, there's a twist: a dquot cache miss requires the dquot to be
      read in from the quota file, during which we drop the ILOCK on the file
      being examined.  This means that we *must* try to attach the dquots
      before taking the ILOCK.
      
      Therefore, dquots must be attached to files in the scrub setup function.
      If doing so yields corruption errors (or unknown dquot errors), we
      instead clear the quotachecked status, which will cause a quotacheck on
      next mount.  A future series will make this trigger live quotacheck.
      
      While we're here, change the xrep_ino_dqattach function to use the
      unlocked dqattach functions so that we avoid cycling the ILOCK if the
      inode already has dquots attached.  This makes the naming and locking
      requirements consistent with the rest of the filesystem.
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      259ba1d3