]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: add a xlog_write_one_vec helper
authorChristoph Hellwig <hch@lst.de>
Wed, 12 Nov 2025 12:14:17 +0000 (13:14 +0100)
committerCarlos Maiolino <cem@kernel.org>
Wed, 21 Jan 2026 11:57:16 +0000 (12:57 +0100)
Add a wrapper for xlog_write for the two callers who need to build a
log_vec and add it to a single-entry chain instead of duplicating the
code.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/xfs_log.c
fs/xfs/xfs_log_cil.c
fs/xfs/xfs_log_priv.h

index d4544ccafea5d5dc946b0d659e7aab641d061d85..c6fa258df844037651f93f153668012dcbc7b28b 100644 (file)
@@ -848,6 +848,26 @@ xlog_wait_on_iclog(
        return 0;
 }
 
+int
+xlog_write_one_vec(
+       struct xlog             *log,
+       struct xfs_cil_ctx      *ctx,
+       struct xfs_log_iovec    *reg,
+       struct xlog_ticket      *ticket)
+{
+       struct xfs_log_vec      lv = {
+               .lv_niovecs     = 1,
+               .lv_iovecp      = reg,
+       };
+       LIST_HEAD               (lv_chain);
+
+       /* account for space used by record data */
+       ticket->t_curr_res -= reg->i_len;
+
+       list_add(&lv.lv_list, &lv_chain);
+       return xlog_write(log, ctx, &lv_chain, ticket, reg->i_len);
+}
+
 /*
  * Write out an unmount record using the ticket provided. We have to account for
  * the data space used in the unmount ticket as this write is not done from a
@@ -876,21 +896,8 @@ xlog_write_unmount_record(
                .i_len = sizeof(unmount_rec),
                .i_type = XLOG_REG_TYPE_UNMOUNT,
        };
-       struct xfs_log_vec vec = {
-               .lv_niovecs = 1,
-               .lv_iovecp = &reg,
-       };
-       LIST_HEAD(lv_chain);
-       list_add(&vec.lv_list, &lv_chain);
-
-       BUILD_BUG_ON((sizeof(struct xlog_op_header) +
-                     sizeof(struct xfs_unmount_log_format)) !=
-                                                       sizeof(unmount_rec));
-
-       /* account for space used by record data */
-       ticket->t_curr_res -= sizeof(unmount_rec);
 
-       return xlog_write(log, NULL, &lv_chain, ticket, reg.i_len);
+       return xlog_write_one_vec(log, NULL, &reg, ticket);
 }
 
 /*
index 778ac47adb8cfbeb66d187c5b70cf77f2e12ea19..83aa06e19cfb2bc3746f251a88a7e2c2ece502d4 100644 (file)
@@ -1098,13 +1098,7 @@ xlog_cil_write_commit_record(
                .i_len = sizeof(struct xlog_op_header),
                .i_type = XLOG_REG_TYPE_COMMIT,
        };
-       struct xfs_log_vec      vec = {
-               .lv_niovecs = 1,
-               .lv_iovecp = &reg,
-       };
        int                     error;
-       LIST_HEAD(lv_chain);
-       list_add(&vec.lv_list, &lv_chain);
 
        if (xlog_is_shutdown(log))
                return -EIO;
@@ -1112,10 +1106,7 @@ xlog_cil_write_commit_record(
        error = xlog_cil_order_write(ctx->cil, ctx->sequence, _COMMIT_RECORD);
        if (error)
                return error;
-
-       /* account for space used by record data */
-       ctx->ticket->t_curr_res -= reg.i_len;
-       error = xlog_write(log, ctx, &lv_chain, ctx->ticket, reg.i_len);
+       error = xlog_write_one_vec(log, ctx, &reg, ctx->ticket);
        if (error)
                xlog_force_shutdown(log, SHUTDOWN_LOG_IO_ERROR);
        return error;
index 0fe59f0525aae7d32bc0550d0e375abb7d5eb322..d2410e78b7f59816bc36808d94924f2e8b011a94 100644 (file)
@@ -507,6 +507,8 @@ void        xlog_print_trans(struct xfs_trans *);
 int    xlog_write(struct xlog *log, struct xfs_cil_ctx *ctx,
                struct list_head *lv_chain, struct xlog_ticket *tic,
                uint32_t len);
+int    xlog_write_one_vec(struct xlog *log, struct xfs_cil_ctx *ctx,
+               struct xfs_log_iovec *reg, struct xlog_ticket *ticket);
 void   xfs_log_ticket_ungrant(struct xlog *log, struct xlog_ticket *ticket);
 void   xfs_log_ticket_regrant(struct xlog *log, struct xlog_ticket *ticket);