From: Brian Foster <bfoster@redhat.com>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 23/45] xfs: log tickets don't need log client id
Date: Tue, 16 Mar 2021 10:51:15 -0400 [thread overview]
Message-ID: <YFDF4zVE3VorGn5t@bfoster> (raw)
In-Reply-To: <20210305051143.182133-24-david@fromorbit.com>
On Fri, Mar 05, 2021 at 04:11:21PM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> We currently set the log ticket client ID when we reserve a
> transaction. This client ID is only ever written to the log by
> a CIL checkpoint or unmount records, and so anything using a high
> level transaction allocated through xfs_trans_alloc() does not need
> a log ticket client ID to be set.
>
> For the CIL checkpoint, the client ID written to the journal is
> always XFS_TRANSACTION, and for the unmount record it is always
> XFS_LOG, and nothing else writes to the log. All of these operations
> tell xlog_write() exactly what they need to write to the log (the
> optype) and build their own opheaders for start, commit and unmount
> records. Hence we no longer need to set the client id in either the
> log ticket or the xfs_trans.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> ---
LGTM with Darrick's suggested feedback:
Reviewed-by: Brian Foster <bfoster@redhat.com>
> fs/xfs/xfs_log.c | 47 ++++++++-----------------------------------
> fs/xfs/xfs_log.h | 16 ++++++---------
> fs/xfs/xfs_log_cil.c | 2 +-
> fs/xfs/xfs_log_priv.h | 10 ++-------
> fs/xfs/xfs_trans.c | 6 ++----
> 5 files changed, 19 insertions(+), 62 deletions(-)
>
> diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
> index c2e69a1f5cad..429cb1e7cc67 100644
> --- a/fs/xfs/xfs_log.c
> +++ b/fs/xfs/xfs_log.c
> @@ -431,10 +431,9 @@ xfs_log_regrant(
> int
> xfs_log_reserve(
> struct xfs_mount *mp,
> - int unit_bytes,
> - int cnt,
> + int unit_bytes,
> + int cnt,
> struct xlog_ticket **ticp,
> - uint8_t client,
> bool permanent)
> {
> struct xlog *log = mp->m_log;
> @@ -442,15 +441,13 @@ xfs_log_reserve(
> int need_bytes;
> int error = 0;
>
> - ASSERT(client == XFS_TRANSACTION || client == XFS_LOG);
> -
> if (XLOG_FORCED_SHUTDOWN(log))
> return -EIO;
>
> XFS_STATS_INC(mp, xs_try_logspace);
>
> ASSERT(*ticp == NULL);
> - tic = xlog_ticket_alloc(log, unit_bytes, cnt, client, permanent);
> + tic = xlog_ticket_alloc(log, unit_bytes, cnt, permanent);
> *ticp = tic;
>
> xlog_grant_push_ail(log, tic->t_cnt ? tic->t_unit_res * tic->t_cnt
> @@ -847,7 +844,7 @@ xlog_unmount_write(
> struct xlog_ticket *tic = NULL;
> int error;
>
> - error = xfs_log_reserve(mp, 600, 1, &tic, XFS_LOG, 0);
> + error = xfs_log_reserve(mp, 600, 1, &tic, 0);
> if (error)
> goto out_err;
>
> @@ -2170,35 +2167,13 @@ xlog_write_calc_vec_length(
>
> static xlog_op_header_t *
> xlog_write_setup_ophdr(
> - struct xlog *log,
> struct xlog_op_header *ophdr,
> - struct xlog_ticket *ticket,
> - uint flags)
> + struct xlog_ticket *ticket)
> {
> ophdr->oh_tid = cpu_to_be32(ticket->t_tid);
> - ophdr->oh_clientid = ticket->t_clientid;
> + ophdr->oh_clientid = XFS_TRANSACTION;
> ophdr->oh_res2 = 0;
> -
> - /* are we copying a commit or unmount record? */
> - ophdr->oh_flags = flags;
> -
> - /*
> - * We've seen logs corrupted with bad transaction client ids. This
> - * makes sure that XFS doesn't generate them on. Turn this into an EIO
> - * and shut down the filesystem.
> - */
> - switch (ophdr->oh_clientid) {
> - case XFS_TRANSACTION:
> - case XFS_VOLUME:
> - case XFS_LOG:
> - break;
> - default:
> - xfs_warn(log->l_mp,
> - "Bad XFS transaction clientid 0x%x in ticket "PTR_FMT,
> - ophdr->oh_clientid, ticket);
> - return NULL;
> - }
> -
> + ophdr->oh_flags = 0;
> return ophdr;
> }
>
> @@ -2439,11 +2414,7 @@ xlog_write(
> if (index)
> optype &= ~XLOG_START_TRANS;
> } else {
> - ophdr = xlog_write_setup_ophdr(log, ptr,
> - ticket, optype);
> - if (!ophdr)
> - return -EIO;
> -
> + ophdr = xlog_write_setup_ophdr(ptr, ticket);
> xlog_write_adv_cnt(&ptr, &len, &log_offset,
> sizeof(struct xlog_op_header));
> added_ophdr = true;
> @@ -3499,7 +3470,6 @@ xlog_ticket_alloc(
> struct xlog *log,
> int unit_bytes,
> int cnt,
> - char client,
> bool permanent)
> {
> struct xlog_ticket *tic;
> @@ -3517,7 +3487,6 @@ xlog_ticket_alloc(
> tic->t_cnt = cnt;
> tic->t_ocnt = cnt;
> tic->t_tid = prandom_u32();
> - tic->t_clientid = client;
> if (permanent)
> tic->t_flags |= XLOG_TIC_PERM_RESERV;
>
> diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h
> index 1bd080ce3a95..c0c3141944ea 100644
> --- a/fs/xfs/xfs_log.h
> +++ b/fs/xfs/xfs_log.h
> @@ -117,16 +117,12 @@ int xfs_log_mount_finish(struct xfs_mount *mp);
> void xfs_log_mount_cancel(struct xfs_mount *);
> xfs_lsn_t xlog_assign_tail_lsn(struct xfs_mount *mp);
> xfs_lsn_t xlog_assign_tail_lsn_locked(struct xfs_mount *mp);
> -void xfs_log_space_wake(struct xfs_mount *mp);
> -int xfs_log_reserve(struct xfs_mount *mp,
> - int length,
> - int count,
> - struct xlog_ticket **ticket,
> - uint8_t clientid,
> - bool permanent);
> -int xfs_log_regrant(struct xfs_mount *mp, struct xlog_ticket *tic);
> -void xfs_log_unmount(struct xfs_mount *mp);
> -int xfs_log_force_umount(struct xfs_mount *mp, int logerror);
> +void xfs_log_space_wake(struct xfs_mount *mp);
> +int xfs_log_reserve(struct xfs_mount *mp, int length, int count,
> + struct xlog_ticket **ticket, bool permanent);
> +int xfs_log_regrant(struct xfs_mount *mp, struct xlog_ticket *tic);
> +void xfs_log_unmount(struct xfs_mount *mp);
> +int xfs_log_force_umount(struct xfs_mount *mp, int logerror);
> bool xfs_log_writable(struct xfs_mount *mp);
>
> struct xlog_ticket *xfs_log_ticket_get(struct xlog_ticket *ticket);
> diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
> index e9da074ecd69..0c81c13e2cf6 100644
> --- a/fs/xfs/xfs_log_cil.c
> +++ b/fs/xfs/xfs_log_cil.c
> @@ -37,7 +37,7 @@ xlog_cil_ticket_alloc(
> {
> struct xlog_ticket *tic;
>
> - tic = xlog_ticket_alloc(log, 0, 1, XFS_TRANSACTION, 0);
> + tic = xlog_ticket_alloc(log, 0, 1, 0);
>
> /*
> * set the current reservation to zero so we know to steal the basic
> diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h
> index bb5fa6b71114..7f601c1c9f45 100644
> --- a/fs/xfs/xfs_log_priv.h
> +++ b/fs/xfs/xfs_log_priv.h
> @@ -158,7 +158,6 @@ typedef struct xlog_ticket {
> int t_unit_res; /* unit reservation in bytes : 4 */
> char t_ocnt; /* original count : 1 */
> char t_cnt; /* current count : 1 */
> - char t_clientid; /* who does this belong to; : 1 */
> char t_flags; /* properties of reservation : 1 */
>
> /* reservation array fields */
> @@ -465,13 +464,8 @@ extern __le32 xlog_cksum(struct xlog *log, struct xlog_rec_header *rhead,
> char *dp, int size);
>
> extern kmem_zone_t *xfs_log_ticket_zone;
> -struct xlog_ticket *
> -xlog_ticket_alloc(
> - struct xlog *log,
> - int unit_bytes,
> - int count,
> - char client,
> - bool permanent);
> +struct xlog_ticket *xlog_ticket_alloc(struct xlog *log, int unit_bytes,
> + int count, bool permanent);
>
> static inline void
> xlog_write_adv_cnt(void **ptr, int *len, int *off, size_t bytes)
> diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
> index 52f3fdf1e0de..83c2b7f22eb7 100644
> --- a/fs/xfs/xfs_trans.c
> +++ b/fs/xfs/xfs_trans.c
> @@ -194,11 +194,9 @@ xfs_trans_reserve(
> ASSERT(resp->tr_logflags & XFS_TRANS_PERM_LOG_RES);
> error = xfs_log_regrant(mp, tp->t_ticket);
> } else {
> - error = xfs_log_reserve(mp,
> - resp->tr_logres,
> + error = xfs_log_reserve(mp, resp->tr_logres,
> resp->tr_logcount,
> - &tp->t_ticket, XFS_TRANSACTION,
> - permanent);
> + &tp->t_ticket, permanent);
> }
>
> if (error)
> --
> 2.28.0
>
next prev parent reply other threads:[~2021-03-16 14:52 UTC|newest]
Thread overview: 145+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-05 5:10 [PATCH 00/45 v3] xfs: consolidated log and optimisation changes Dave Chinner
2021-03-05 5:10 ` [PATCH 01/45] xfs: initialise attr fork on inode create Dave Chinner
2021-03-08 22:20 ` Darrick J. Wong
2021-03-16 8:35 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 02/45] xfs: log stripe roundoff is a property of the log Dave Chinner
2021-03-05 5:11 ` [PATCH 03/45] xfs: separate CIL commit record IO Dave Chinner
2021-03-08 8:34 ` Chandan Babu R
2021-03-15 14:40 ` Brian Foster
2021-03-16 8:40 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 04/45] xfs: remove xfs_blkdev_issue_flush Dave Chinner
2021-03-08 9:31 ` Chandan Babu R
2021-03-08 22:21 ` Darrick J. Wong
2021-03-15 14:40 ` Brian Foster
2021-03-16 8:41 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 05/45] xfs: async blkdev cache flush Dave Chinner
2021-03-08 9:48 ` Chandan Babu R
2021-03-08 22:24 ` Darrick J. Wong
2021-03-15 14:41 ` Brian Foster
2021-03-15 16:32 ` Darrick J. Wong
2021-03-16 8:43 ` Christoph Hellwig
2021-03-08 22:26 ` Darrick J. Wong
2021-03-15 14:42 ` Brian Foster
2021-03-05 5:11 ` [PATCH 06/45] xfs: CIL checkpoint flushes caches unconditionally Dave Chinner
2021-03-15 14:43 ` Brian Foster
2021-03-16 8:47 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 07/45] xfs: remove need_start_rec parameter from xlog_write() Dave Chinner
2021-03-15 14:45 ` Brian Foster
2021-03-16 14:15 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 08/45] xfs: journal IO cache flush reductions Dave Chinner
2021-03-08 10:49 ` Chandan Babu R
2021-03-08 12:25 ` Brian Foster
2021-03-09 1:13 ` Dave Chinner
2021-03-10 20:49 ` Brian Foster
2021-03-10 21:28 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 09/45] xfs: Fix CIL throttle hang when CIL space used going backwards Dave Chinner
2021-03-05 5:11 ` [PATCH 10/45] xfs: reduce buffer log item shadow allocations Dave Chinner
2021-03-15 14:52 ` Brian Foster
2021-03-05 5:11 ` [PATCH 11/45] xfs: xfs_buf_item_size_segment() needs to pass segment offset Dave Chinner
2021-03-05 5:11 ` [PATCH 12/45] xfs: optimise xfs_buf_item_size/format for contiguous regions Dave Chinner
2021-03-05 5:11 ` [PATCH 13/45] xfs: xfs_log_force_lsn isn't passed a LSN Dave Chinner
2021-03-08 22:53 ` Darrick J. Wong
2021-03-11 0:26 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 14/45] xfs: AIL needs asynchronous CIL forcing Dave Chinner
2021-03-08 23:45 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 15/45] xfs: CIL work is serialised, not pipelined Dave Chinner
2021-03-08 23:14 ` Darrick J. Wong
2021-03-08 23:38 ` Dave Chinner
2021-03-09 1:55 ` Darrick J. Wong
2021-03-09 22:35 ` Andi Kleen
2021-03-10 6:11 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 16/45] xfs: type verification is expensive Dave Chinner
2021-03-05 5:11 ` [PATCH 17/45] xfs: No need for inode number error injection in __xfs_dir3_data_check Dave Chinner
2021-03-05 5:11 ` [PATCH 18/45] xfs: reduce debug overhead of dir leaf/node checks Dave Chinner
2021-03-05 5:11 ` [PATCH 19/45] xfs: factor out the CIL transaction header building Dave Chinner
2021-03-08 23:47 ` Darrick J. Wong
2021-03-16 14:50 ` Brian Foster
2021-03-05 5:11 ` [PATCH 20/45] xfs: only CIL pushes require a start record Dave Chinner
2021-03-09 0:07 ` Darrick J. Wong
2021-03-16 14:51 ` Brian Foster
2021-03-05 5:11 ` [PATCH 21/45] xfs: embed the xlog_op_header in the unmount record Dave Chinner
2021-03-09 0:15 ` Darrick J. Wong
2021-03-11 2:54 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 22/45] xfs: embed the xlog_op_header in the commit record Dave Chinner
2021-03-09 0:17 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 23/45] xfs: log tickets don't need log client id Dave Chinner
2021-03-09 0:21 ` Darrick J. Wong
2021-03-09 1:19 ` Dave Chinner
2021-03-09 1:48 ` Darrick J. Wong
2021-03-11 3:01 ` Dave Chinner
2021-03-16 14:51 ` Brian Foster [this message]
2021-03-05 5:11 ` [PATCH 24/45] xfs: move log iovec alignment to preparation function Dave Chinner
2021-03-09 2:14 ` Darrick J. Wong
2021-03-16 14:51 ` Brian Foster
2021-03-05 5:11 ` [PATCH 25/45] xfs: reserve space and initialise xlog_op_header in item formatting Dave Chinner
2021-03-09 2:21 ` Darrick J. Wong
2021-03-11 3:29 ` Dave Chinner
2021-03-11 3:41 ` Darrick J. Wong
2021-03-16 14:54 ` Brian Foster
2021-03-16 14:53 ` Brian Foster
2021-05-19 3:18 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 26/45] xfs: log ticket region debug is largely useless Dave Chinner
2021-03-09 2:31 ` Darrick J. Wong
2021-03-16 14:55 ` Brian Foster
2021-05-19 3:27 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 27/45] xfs: pass lv chain length into xlog_write() Dave Chinner
2021-03-09 2:36 ` Darrick J. Wong
2021-03-11 3:37 ` Dave Chinner
2021-03-16 18:38 ` Brian Foster
2021-03-05 5:11 ` [PATCH 28/45] xfs: introduce xlog_write_single() Dave Chinner
2021-03-09 2:39 ` Darrick J. Wong
2021-03-11 4:19 ` Dave Chinner
2021-03-16 18:39 ` Brian Foster
2021-05-19 3:44 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 29/45] xfs:_introduce xlog_write_partial() Dave Chinner
2021-03-09 2:59 ` Darrick J. Wong
2021-03-11 4:33 ` Dave Chinner
2021-03-18 13:22 ` Brian Foster
2021-05-19 4:49 ` Dave Chinner
2021-05-20 12:33 ` Brian Foster
2021-05-27 18:03 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 30/45] xfs: xlog_write() no longer needs contwr state Dave Chinner
2021-03-09 3:01 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 31/45] xfs: CIL context doesn't need to count iovecs Dave Chinner
2021-03-09 3:16 ` Darrick J. Wong
2021-03-11 5:03 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 32/45] xfs: use the CIL space used counter for emptiness checks Dave Chinner
2021-03-10 23:01 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 33/45] xfs: lift init CIL reservation out of xc_cil_lock Dave Chinner
2021-03-10 23:25 ` Darrick J. Wong
2021-03-11 5:42 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 34/45] xfs: rework per-iclog header CIL reservation Dave Chinner
2021-03-11 0:03 ` Darrick J. Wong
2021-03-11 6:03 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 35/45] xfs: introduce per-cpu CIL tracking sructure Dave Chinner
2021-03-11 0:11 ` Darrick J. Wong
2021-03-11 6:33 ` Dave Chinner
2021-03-11 6:42 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 36/45] xfs: implement percpu cil space used calculation Dave Chinner
2021-03-11 0:20 ` Darrick J. Wong
2021-03-11 6:51 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 37/45] xfs: track CIL ticket reservation in percpu structure Dave Chinner
2021-03-11 0:26 ` Darrick J. Wong
2021-03-12 0:47 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 38/45] xfs: convert CIL busy extents to per-cpu Dave Chinner
2021-03-11 0:36 ` Darrick J. Wong
2021-03-12 1:15 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 39/45] xfs: Add order IDs to log items in CIL Dave Chinner
2021-03-11 1:00 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 40/45] xfs: convert CIL to unordered per cpu lists Dave Chinner
2021-03-11 1:15 ` Darrick J. Wong
2021-03-12 2:18 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 41/45] xfs: move CIL ordering to the logvec chain Dave Chinner
2021-03-11 1:34 ` Darrick J. Wong
2021-03-12 2:29 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 42/45] xfs: __percpu_counter_compare() inode count debug too expensive Dave Chinner
2021-03-11 1:36 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 43/45] xfs: avoid cil push lock if possible Dave Chinner
2021-03-11 1:47 ` Darrick J. Wong
2021-03-12 2:36 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 44/45] xfs: xlog_sync() manually adjusts grant head space Dave Chinner
2021-03-11 2:00 ` Darrick J. Wong
2021-03-16 3:04 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 45/45] xfs: expanding delayed logging design with background material Dave Chinner
2021-03-11 2:30 ` Darrick J. Wong
2021-03-16 3:28 ` Dave Chinner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YFDF4zVE3VorGn5t@bfoster \
--to=bfoster@redhat.com \
--cc=david@fromorbit.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox