On Tue, Jun 10, 2025 at 07:14:59AM +0200, Christoph Hellwig wrote: > Split out handling of ordered items into a single branch in > xlog_cil_insert_format_items so that the rest of the code becomes more > clear. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > fs/xfs/xfs_log_cil.c | 31 +++++++++++++------------------ > 1 file changed, 13 insertions(+), 18 deletions(-) > > diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c > index c3db01b2ea47..81b6780e0afc 100644 > --- a/fs/xfs/xfs_log_cil.c > +++ b/fs/xfs/xfs_log_cil.c > @@ -452,9 +452,8 @@ xlog_cil_insert_format_items( > } > > list_for_each_entry(lip, &tp->t_items, li_trans) { > - struct xfs_log_vec *lv; > - struct xfs_log_vec *shadow; > - bool ordered = false; > + struct xfs_log_vec *lv = lip->li_lv; > + struct xfs_log_vec *shadow = lip->li_lv_shadow; > > /* Skip items which aren't dirty in this transaction. */ > if (!test_bit(XFS_LI_DIRTY, &lip->li_flags)) > @@ -464,21 +463,23 @@ xlog_cil_insert_format_items( > * The formatting size information is already attached to > * the shadow lv on the log item. > */ > - shadow = lip->li_lv_shadow; > - if (shadow->lv_buf_len == XFS_LOG_VEC_ORDERED) > - ordered = true; > + if (shadow->lv_buf_len == XFS_LOG_VEC_ORDERED) { > + if (!lv) { > + lv = shadow; > + lv->lv_item = lip; > + } > + ASSERT(shadow->lv_size == lv->lv_size); This assert is kind of confusing me. if we have an ORDERED vector here, couldn't we still have a shadow size smaller than the current vector? > + xfs_cil_prepare_item(log, lip, lv, diff_len); > + continue; > + } > > /* Skip items that do not have any vectors for writing */ > - if (!shadow->lv_niovecs && !ordered) > + if (!shadow->lv_niovecs) > continue; > > /* compare to existing item size */ > - if (lip->li_lv && shadow->lv_size <= lip->li_lv->lv_size) { > + if (lv && shadow->lv_size <= lv->lv_size) { > /* same or smaller, optimise common overwrite case */ > - lv = lip->li_lv; > - > - if (ordered) > - goto insert; > > /* > * set the item up as though it is a new insertion so > @@ -498,16 +499,10 @@ xlog_cil_insert_format_items( > /* switch to shadow buffer! */ > lv = shadow; > lv->lv_item = lip; > - if (ordered) { > - /* track as an ordered logvec */ > - ASSERT(lip->li_lv == NULL); > - goto insert; > - } > } > > ASSERT(IS_ALIGNED((unsigned long)lv->lv_buf, sizeof(uint64_t))); > lip->li_ops->iop_format(lip, lv); > -insert: > xfs_cil_prepare_item(log, lip, lv, diff_len); > } > } > -- > 2.47.2 > >