From: Christoph Hellwig Date: Mon, 14 Jul 2025 05:37:24 +0000 (+0200) Subject: xfs: factor out a xlog_write_space_advance helper X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fxfs-log-cleanups;p=users%2Fhch%2Fxfs.git xfs: factor out a xlog_write_space_advance helper Add a new xlog_write_space_advance that returns the current place in the iclog that data is written to, and advances the various counters by the amount taken from xlog_write_iovec, and also use it xlog_write_partial, which open codes the counter adjustments, but misses the asserts. Signed-off-by: Christoph Hellwig --- diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 48fc17cad60a..802329d2e360 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -1914,21 +1914,31 @@ static inline uint32_t xlog_write_space_left(struct xlog_write_data *data) return data->iclog->ic_size - data->log_offset; } +static void * +xlog_write_space_advance( + struct xlog_write_data *data, + unsigned int len) +{ + void *p = data->iclog->ic_datap + data->log_offset; + + ASSERT(xlog_write_space_left(data) >= len); + ASSERT(data->log_offset % sizeof(int32_t) == 0); + ASSERT(len % sizeof(int32_t) == 0); + + data->data_cnt += len; + data->log_offset += len; + data->bytes_left -= len; + return p; +} + static inline void xlog_write_iovec( struct xlog_write_data *data, void *buf, uint32_t buf_len) { - ASSERT(xlog_write_space_left(data) >= buf_len); - ASSERT(data->log_offset % sizeof(int32_t) == 0); - ASSERT(buf_len % sizeof(int32_t) == 0); - - memcpy(data->iclog->ic_datap + data->log_offset, buf, buf_len); - data->log_offset += buf_len; - data->bytes_left -= buf_len; + memcpy(xlog_write_space_advance(data, buf_len), buf, buf_len); data->record_cnt++; - data->data_cnt += buf_len; } /* @@ -2069,7 +2079,8 @@ xlog_write_partial( if (error) return error; - ophdr = data->iclog->ic_datap + data->log_offset; + ophdr = xlog_write_space_advance(data, + sizeof(struct xlog_op_header)); ophdr->oh_tid = cpu_to_be32(data->ticket->t_tid); ophdr->oh_clientid = XFS_TRANSACTION; ophdr->oh_res2 = 0; @@ -2077,9 +2088,6 @@ xlog_write_partial( data->ticket->t_curr_res -= sizeof(struct xlog_op_header); - data->log_offset += sizeof(struct xlog_op_header); - data->data_cnt += sizeof(struct xlog_op_header); - data->bytes_left -= sizeof(struct xlog_op_header); /* * If rlen fits in the iclog, then end the region