All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V4 RESEND 0/7] Fix log reservation calculation for xattr insert operation
@ 2020-02-24  4:00 Chandan Rajendra
  2020-02-24  4:00 ` [PATCH V4 RESEND 1/7] xfs: Pass xattr name and value length explicitly to xfs_attr_leaf_newentsize Chandan Rajendra
                   ` (6 more replies)
  0 siblings, 7 replies; 27+ messages in thread
From: Chandan Rajendra @ 2020-02-24  4:00 UTC (permalink / raw)
  To: linux-xfs
  Cc: Chandan Rajendra, david, chandan, darrick.wong, bfoster, amir73il

Log space reservation for xattr insert operation can be divided into two
parts,
1. Mount time
   - Inode
   - Superblock for accounting space allocations
   - AGF for accounting space used by count, block number, rmap and refcnt
     btrees.

2. The remaining log space can only be calculated at run time because,
   - A local xattr can be large enough to cause a double split of the dabtree.
   - The value of the xattr can be large enough to be stored in remote
     blocks. The contents of the remote blocks are not logged.

   The log space reservation could be,
   - 2 * XFS_DA_NODE_MAXDEPTH number of blocks. Additional XFS_DA_NODE_MAXDEPTH
     number of blocks are required if xattr is large enough to cause another
     split of the dabtree path from root to leaf block.
   - BMBT blocks for storing (2 * XFS_DA_NODE_MAXDEPTH) record
     entries. Additional XFS_DA_NODE_MAXDEPTH number of blocks are required in
     case of a double split of the dabtree path from root to leaf blocks.
   - Space for logging blocks of count, block number, rmap and refcnt btrees.

At present mount time log reservation includes block count required for a
single split of the dabtree. The dabtree block count is also taken into
account by xfs_attr_calc_size().

Also, AGF log space reservation isn't accounted for.

Due to the reasons mentioned above, log reservation calculation for xattr
insert operation gives an incorrect value.

Apart from the above, xfs_log_calc_max_attrsetm_res() passes byte count as
an argument to XFS_NEXTENTADD_SPACE_RES() instead of block count.

This patchset aims to fix this log space reservation calcuation bug.

Patches 1-2 and 4-6 refactor the existing code around
xfs_attr_calc_size(). Patches 3 and 7 change the logic to fix log
reservation calculation.

The patchset can also be obtained from
https://github.com/chandanr/linux/tree/xfs-fix-attr-resv-calc-v4.

Changelog:
V1 -> V2:
1. Use convenience variables to reduce indentation of code.

V2 -> V3:
1. Introduce 'struct xfs_attr_set_resv' to collect various block size
   reservations when inserting an xattr.
2. Add xfs_calc_attr_res() to calculate the total log reservation to
   required when inserting an xattr.

V3 -> V4:
1. Rebase the patchset on top of Christoph's "Clean attr interface"
   patchset.
2. Split the patchset into
   - Patches which refactor the existing calculation in
     xfs_attr_calc_size().
   - One patch which fixes the calculation inside
     xfs_attr_calc_size().
3. Fix indentation issues.
4. Pass attribute geometry pointer to xfs_attr_leaf_newentsize()
   instead of a pointer to 'struct xfs_mount'.

Chandan Rajendra (7):
  xfs: Pass xattr name and value length explicitly to
    xfs_attr_leaf_newentsize
  xfs: xfs_attr_calc_size: Use local variables to track individual space
    components
  xfs: xfs_attr_calc_size: Calculate Bmbt blks only once
  xfs: Introduce struct xfs_attr_set_resv
  xfs: xfs_attr_calc_size: Explicitly pass mp, namelen and valuelen args
  xfs: Make xfs_attr_calc_size() non-static
  xfs: Fix log reservation calculation for xattr insert operation

 fs/xfs/libxfs/xfs_attr.c       | 107 ++++++++++++++++++---------------
 fs/xfs/libxfs/xfs_attr.h       |  18 ++++++
 fs/xfs/libxfs/xfs_attr_leaf.c  |  39 ++++++++----
 fs/xfs/libxfs/xfs_attr_leaf.h  |   3 +-
 fs/xfs/libxfs/xfs_log_rlimit.c |  16 ++---
 fs/xfs/libxfs/xfs_trans_resv.c |  50 ++++++++-------
 fs/xfs/libxfs/xfs_trans_resv.h |   2 +
 7 files changed, 140 insertions(+), 95 deletions(-)

-- 
2.19.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2020-02-27 13:35 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-24  4:00 [PATCH V4 RESEND 0/7] Fix log reservation calculation for xattr insert operation Chandan Rajendra
2020-02-24  4:00 ` [PATCH V4 RESEND 1/7] xfs: Pass xattr name and value length explicitly to xfs_attr_leaf_newentsize Chandan Rajendra
2020-02-25 16:11   ` Brian Foster
2020-02-26 16:58   ` Christoph Hellwig
2020-02-27  9:27     ` Chandan Rajendra
2020-02-24  4:00 ` [PATCH V4 RESEND 2/7] xfs: xfs_attr_calc_size: Use local variables to track individual space components Chandan Rajendra
2020-02-25 16:11   ` Brian Foster
2020-02-26 10:38     ` Chandan Rajendra
2020-02-24  4:00 ` [PATCH V4 RESEND 3/7] xfs: xfs_attr_calc_size: Calculate Bmbt blks only once Chandan Rajendra
2020-02-25 16:11   ` Brian Foster
2020-02-26 15:03     ` Chandan Rajendra
2020-02-26 16:42       ` Brian Foster
2020-02-27  8:59         ` Chandan Rajendra
2020-02-27 11:53           ` Brian Foster
2020-02-27 13:38             ` Chandan Rajendra
2020-02-24  4:00 ` [PATCH V4 RESEND 4/7] xfs: Introduce struct xfs_attr_set_resv Chandan Rajendra
2020-02-25 16:27   ` Brian Foster
2020-02-26 10:40     ` Chandan Rajendra
2020-02-24  4:00 ` [PATCH V4 RESEND 5/7] xfs: xfs_attr_calc_size: Explicitly pass mp, namelen and valuelen args Chandan Rajendra
2020-02-25 16:27   ` Brian Foster
2020-02-24  4:00 ` [PATCH V4 RESEND 6/7] xfs: Make xfs_attr_calc_size() non-static Chandan Rajendra
2020-02-25 16:24   ` Darrick J. Wong
2020-02-24  4:00 ` [PATCH V4 RESEND 7/7] xfs: Fix log reservation calculation for xattr insert operation Chandan Rajendra
2020-02-25 17:19   ` Brian Foster
2020-02-26 11:21     ` Chandan Rajendra
2020-02-26 18:50       ` Brian Foster
2020-02-27  9:14         ` Chandan Rajendra

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.