On Sunday, February 23, 2020 1:25 PM Amir Goldstein wrote: > On Sun, Feb 23, 2020 at 4:06 AM Allison Collins > <allison.henderson@xxxxxxxxxx> wrote: > > > > Hi all, > > > > This set is a subset of a larger series for delayed attributes. Which is > > a subset of an even larger series, parent pointers. Delayed attributes > > allow attribute operations (set and remove) to be logged and committed > > in the same way that other delayed operations do. This allows more > > complex operations (like parent pointers) to be broken up into multiple > > smaller transactions. To do this, the existing attr operations must be > > modified to operate as either a delayed operation or a inline operation > > since older filesystems will not be able to use the new log entries. > > High level question, before I dive into the series: > Hi Amir, My 2 cents on this topic (Assuming "delayed operations" refer to "deferred ops") ... > Which other "delayed operations" already exist? static const struct xfs_defer_op_type *defer_op_types[] = { [XFS_DEFER_OPS_TYPE_BMAP] = &xfs_bmap_update_defer_type, [XFS_DEFER_OPS_TYPE_REFCOUNT] = &xfs_refcount_update_defer_type, [XFS_DEFER_OPS_TYPE_RMAP] = &xfs_rmap_update_defer_type, [XFS_DEFER_OPS_TYPE_FREE] = &xfs_extent_free_defer_type, [XFS_DEFER_OPS_TYPE_AGFL_FREE] = &xfs_agfl_free_defer_type, }; > I think delayed operations were added by Darrick to handle the growth of > translation size due to reflink. Right? So I assume the existing delayed > operations deal with block accounting. IIRC, Deferred ops are meant to not violate the AG locking order. If AG 'x' metadata block[s] is locked then we can only lock metadata blocks of AGs starting from 'x+1'. Transactions can return -EAGAIN when they detect that they need to lock metadata blocks belonging to AG 'x-1' or less. In such a case the transaction will be rolled during which the locks on metadata blocks are given up. > When speaking of parent pointers, without having looked into the details yet, > it seem the delayed operations we would want to log are operations that deal > with namespace changes, i.e.: link,unlink,rename. > The information needed to be logged for these ops is minimal. > Why do we need a general infrastructure for delayed attr operations? > > Thanks, > Amir. > > > > -- chandan