Thread (86 messages) 86 messages, 3 authors, 2021-06-03

Re: [PATCH 35/39] xfs: convert log vector chain to use list heads

From: "Darrick J. Wong" <djwong@kernel.org>
Date: 2021-06-03 00:50:39

On Thu, Jun 03, 2021 at 10:38:19AM +1000, Dave Chinner wrote:
On Thu, May 27, 2021 at 12:13:19PM -0700, Darrick J. Wong wrote:
quoted
On Wed, May 19, 2021 at 10:13:13PM +1000, Dave Chinner wrote:
.....
quoted
quoted
@@ -913,25 +912,23 @@ xlog_cil_push_work(
 	xlog_cil_pcp_aggregate(cil, ctx);
 
 	list_sort(NULL, &ctx->log_items, xlog_cil_order_cmp);
-
 	while (!list_empty(&ctx->log_items)) {
 		struct xfs_log_item	*item;
 
 		item = list_first_entry(&ctx->log_items,
 					struct xfs_log_item, li_cil);
+		lv = item->li_lv;
 		list_del_init(&item->li_cil);
 		item->li_order_id = 0;
-		if (!ctx->lv_chain)
-			ctx->lv_chain = item->li_lv;
-		else
-			lv->lv_next = item->li_lv;
-		lv = item->li_lv;
 		item->li_lv = NULL;
-		num_iovecs += lv->lv_niovecs;
 
+		num_iovecs += lv->lv_niovecs;
Not sure why "lv = item->li_lv" needed to move up?

I think the only change needed here is replacing the lv_chain/lv_next
business with the list_add_tail?
Yes, but someone complained about the awful diff in the next patch,
so moving the "lv = item->li_lv" made the diff in the next patch
much, much cleaner...

<shrug>

I can move it back to the next patch if you really want, but it's
really just shuffling deck chairs at this point...
Nope, don't care that much.
quoted
quoted
@@ -985,8 +985,14 @@ xlog_cil_push_work(
 	 * use the commit record lsn then we can move the tail beyond the grant
 	 * write head.
 	 */
-	error = xlog_write(log, &lvhdr, ctx->ticket, &ctx->start_lsn, NULL,
-				num_bytes);
+	error = xlog_write(log, &ctx->lv_chain, ctx->ticket, &ctx->start_lsn,
+				NULL, num_bytes);
+
+	/*
+	 * Take the lvhdr back off the lv_chain as it should not be passed
+	 * to log IO completion.
+	 */
+	list_del(&lvhdr.lv_list);
Seems a little clunky, but I guess I see why it's needed.
I could replace the stack structure with a memory allocation and
then we wouldn't need to care, but I'm trying to keep memory
allocation out of this fast path as much as possible....
Oh, that's much worse.
quoted
I /think/ I don't see any place where the onstack lvhdr can escape out
of the chain after _push_work returns, so this is safe enough.
It can't, because we own the chain here and are completely
responsible for cleaning it up on failure.
Ok.  I think I'm satisfied now:
Reviewed-by: Darrick J. Wong <djwong@kernel.org>

--D
Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help