All of lore.kernel.org
 help / color / mirror / Atom feed
* fs/xfs/xfs_log_cil.c:897:1-10: second lock on line 900
@ 2024-12-04  8:51 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-12-04  8:51 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Julia Lawall

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Dave Chinner <dchinner@redhat.com>
CC: "Darrick J. Wong" <djwong@kernel.org>
CC: Chandan Babu R <chandanrlinux@gmail.com>
CC: Allison Henderson <allison.henderson@oracle.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   feffde684ac29a3b7aec82d2df850fbdbdee55e4
commit: eef983ffeae7a1cdde8c3338155ae2dd74b8621b xfs: journal IO cache flush reductions
date:   3 years, 5 months ago
:::::: branch date: 16 hours ago
:::::: commit date: 3 years, 5 months ago
config: x86_64-randconfig-104-20241115 (https://download.01.org/0day-ci/archive/20241204/202412041955.WNw2dKDo-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202412041955.WNw2dKDo-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> fs/xfs/xfs_log_cil.c:897:1-10: second lock on line 900

vim +897 fs/xfs/xfs_log_cil.c

89ae379d564c5d Christoph Hellwig 2019-06-28  625  
71e330b593905e Dave Chinner      2010-05-21  626  /*
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  627   * Push the Committed Item List to the log.
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  628   *
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  629   * If the current sequence is the same as xc_push_seq we need to do a flush. If
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  630   * xc_push_seq is less than the current sequence, then it has already been
a44f13edf0ebb4 Dave Chinner      2010-08-24  631   * flushed and we don't need to do anything - the caller will wait for it to
a44f13edf0ebb4 Dave Chinner      2010-08-24  632   * complete if necessary.
a44f13edf0ebb4 Dave Chinner      2010-08-24  633   *
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  634   * xc_push_seq is checked unlocked against the sequence number for a match.
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  635   * Hence we can allow log forces to run racily and not issue pushes for the
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  636   * same sequence twice.  If we get a race between multiple pushes for the same
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  637   * sequence they will block on the first one and then abort, hence avoiding
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  638   * needless pushes.
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  639   */
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  640  static void
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  641  xlog_cil_push_work(
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  642  	struct work_struct	*work)
71e330b593905e Dave Chinner      2010-05-21  643  {
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  644  	struct xfs_cil		*cil =
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  645  		container_of(work, struct xfs_cil, xc_push_work);
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  646  	struct xlog		*log = cil->xc_log;
71e330b593905e Dave Chinner      2010-05-21  647  	struct xfs_log_vec	*lv;
71e330b593905e Dave Chinner      2010-05-21  648  	struct xfs_cil_ctx	*ctx;
71e330b593905e Dave Chinner      2010-05-21  649  	struct xfs_cil_ctx	*new_ctx;
71e330b593905e Dave Chinner      2010-05-21  650  	struct xlog_in_core	*commit_iclog;
71e330b593905e Dave Chinner      2010-05-21  651  	struct xlog_ticket	*tic;
71e330b593905e Dave Chinner      2010-05-21  652  	int			num_iovecs;
71e330b593905e Dave Chinner      2010-05-21  653  	int			error = 0;
71e330b593905e Dave Chinner      2010-05-21  654  	struct xfs_trans_header thdr;
71e330b593905e Dave Chinner      2010-05-21  655  	struct xfs_log_iovec	lhdr;
71e330b593905e Dave Chinner      2010-05-21  656  	struct xfs_log_vec	lvhdr = { NULL };
71e330b593905e Dave Chinner      2010-05-21  657  	xfs_lsn_t		commit_lsn;
4c2d542f2e7865 Dave Chinner      2012-04-23  658  	xfs_lsn_t		push_seq;
bad77c375e8de6 Dave Chinner      2021-06-18  659  	struct bio		bio;
bad77c375e8de6 Dave Chinner      2021-06-18  660  	DECLARE_COMPLETION_ONSTACK(bdev_flush);
71e330b593905e Dave Chinner      2010-05-21  661  
707e0ddaf67e89 Tetsuo Handa      2019-08-26  662  	new_ctx = kmem_zalloc(sizeof(*new_ctx), KM_NOFS);
71e330b593905e Dave Chinner      2010-05-21  663  	new_ctx->ticket = xlog_cil_ticket_alloc(log);
71e330b593905e Dave Chinner      2010-05-21  664  
71e330b593905e Dave Chinner      2010-05-21  665  	down_write(&cil->xc_ctx_lock);
71e330b593905e Dave Chinner      2010-05-21  666  	ctx = cil->xc_ctx;
71e330b593905e Dave Chinner      2010-05-21  667  
4bb928cdb900d0 Dave Chinner      2013-08-12  668  	spin_lock(&cil->xc_push_lock);
4c2d542f2e7865 Dave Chinner      2012-04-23  669  	push_seq = cil->xc_push_seq;
4c2d542f2e7865 Dave Chinner      2012-04-23  670  	ASSERT(push_seq <= ctx->sequence);
71e330b593905e Dave Chinner      2010-05-21  671  
0e7ab7efe77451 Dave Chinner      2020-03-24  672  	/*
0e7ab7efe77451 Dave Chinner      2020-03-24  673  	 * Wake up any background push waiters now this context is being pushed.
0e7ab7efe77451 Dave Chinner      2020-03-24  674  	 */
c7f87f3984cfa1 Dave Chinner      2020-06-16  675  	if (ctx->space_used >= XLOG_CIL_BLOCKING_SPACE_LIMIT(log))
c7f87f3984cfa1 Dave Chinner      2020-06-16  676  		wake_up_all(&cil->xc_push_wait);
0e7ab7efe77451 Dave Chinner      2020-03-24  677  
4c2d542f2e7865 Dave Chinner      2012-04-23  678  	/*
4c2d542f2e7865 Dave Chinner      2012-04-23  679  	 * Check if we've anything to push. If there is nothing, then we don't
4c2d542f2e7865 Dave Chinner      2012-04-23  680  	 * move on to a new sequence number and so we have to be able to push
4c2d542f2e7865 Dave Chinner      2012-04-23  681  	 * this sequence again later.
4c2d542f2e7865 Dave Chinner      2012-04-23  682  	 */
4c2d542f2e7865 Dave Chinner      2012-04-23  683  	if (list_empty(&cil->xc_cil)) {
4c2d542f2e7865 Dave Chinner      2012-04-23  684  		cil->xc_push_seq = 0;
4bb928cdb900d0 Dave Chinner      2013-08-12  685  		spin_unlock(&cil->xc_push_lock);
a44f13edf0ebb4 Dave Chinner      2010-08-24  686  		goto out_skip;
4c2d542f2e7865 Dave Chinner      2012-04-23  687  	}
4c2d542f2e7865 Dave Chinner      2012-04-23  688  
a44f13edf0ebb4 Dave Chinner      2010-08-24  689  
cf085a1b5d2214 Joe Perches       2019-11-07  690  	/* check for a previously pushed sequence */
8af3dcd3c89aef Dave Chinner      2014-09-23  691  	if (push_seq < cil->xc_ctx->sequence) {
8af3dcd3c89aef Dave Chinner      2014-09-23  692  		spin_unlock(&cil->xc_push_lock);
df806158b0f6eb Dave Chinner      2010-05-17  693  		goto out_skip;
8af3dcd3c89aef Dave Chinner      2014-09-23  694  	}
8af3dcd3c89aef Dave Chinner      2014-09-23  695  
8af3dcd3c89aef Dave Chinner      2014-09-23  696  	/*
8af3dcd3c89aef Dave Chinner      2014-09-23  697  	 * We are now going to push this context, so add it to the committing
8af3dcd3c89aef Dave Chinner      2014-09-23  698  	 * list before we do anything else. This ensures that anyone waiting on
8af3dcd3c89aef Dave Chinner      2014-09-23  699  	 * this push can easily detect the difference between a "push in
8af3dcd3c89aef Dave Chinner      2014-09-23  700  	 * progress" and "CIL is empty, nothing to do".
8af3dcd3c89aef Dave Chinner      2014-09-23  701  	 *
8af3dcd3c89aef Dave Chinner      2014-09-23  702  	 * IOWs, a wait loop can now check for:
8af3dcd3c89aef Dave Chinner      2014-09-23  703  	 *	the current sequence not being found on the committing list;
8af3dcd3c89aef Dave Chinner      2014-09-23  704  	 *	an empty CIL; and
8af3dcd3c89aef Dave Chinner      2014-09-23  705  	 *	an unchanged sequence number
8af3dcd3c89aef Dave Chinner      2014-09-23  706  	 * to detect a push that had nothing to do and therefore does not need
8af3dcd3c89aef Dave Chinner      2014-09-23  707  	 * waiting on. If the CIL is not empty, we get put on the committing
8af3dcd3c89aef Dave Chinner      2014-09-23  708  	 * list before emptying the CIL and bumping the sequence number. Hence
8af3dcd3c89aef Dave Chinner      2014-09-23  709  	 * an empty CIL and an unchanged sequence number means we jumped out
8af3dcd3c89aef Dave Chinner      2014-09-23  710  	 * above after doing nothing.
8af3dcd3c89aef Dave Chinner      2014-09-23  711  	 *
8af3dcd3c89aef Dave Chinner      2014-09-23  712  	 * Hence the waiter will either find the commit sequence on the
8af3dcd3c89aef Dave Chinner      2014-09-23  713  	 * committing list or the sequence number will be unchanged and the CIL
8af3dcd3c89aef Dave Chinner      2014-09-23  714  	 * still dirty. In that latter case, the push has not yet started, and
8af3dcd3c89aef Dave Chinner      2014-09-23  715  	 * so the waiter will have to continue trying to check the CIL
8af3dcd3c89aef Dave Chinner      2014-09-23  716  	 * committing list until it is found. In extreme cases of delay, the
8af3dcd3c89aef Dave Chinner      2014-09-23  717  	 * sequence may fully commit between the attempts the wait makes to wait
8af3dcd3c89aef Dave Chinner      2014-09-23  718  	 * on the commit sequence.
8af3dcd3c89aef Dave Chinner      2014-09-23  719  	 */
8af3dcd3c89aef Dave Chinner      2014-09-23  720  	list_add(&ctx->committing, &cil->xc_committing);
8af3dcd3c89aef Dave Chinner      2014-09-23  721  	spin_unlock(&cil->xc_push_lock);
df806158b0f6eb Dave Chinner      2010-05-17  722  
71e330b593905e Dave Chinner      2010-05-21  723  	/*
bad77c375e8de6 Dave Chinner      2021-06-18  724  	 * The CIL is stable at this point - nothing new will be added to it
bad77c375e8de6 Dave Chinner      2021-06-18  725  	 * because we hold the flush lock exclusively. Hence we can now issue
bad77c375e8de6 Dave Chinner      2021-06-18  726  	 * a cache flush to ensure all the completed metadata in the journal we
bad77c375e8de6 Dave Chinner      2021-06-18  727  	 * are about to overwrite is on stable storage.
bad77c375e8de6 Dave Chinner      2021-06-18  728  	 */
bad77c375e8de6 Dave Chinner      2021-06-18  729  	xfs_flush_bdev_async(&bio, log->l_mp->m_ddev_targp->bt_bdev,
bad77c375e8de6 Dave Chinner      2021-06-18  730  				&bdev_flush);
bad77c375e8de6 Dave Chinner      2021-06-18  731  
bad77c375e8de6 Dave Chinner      2021-06-18  732  	/*
bad77c375e8de6 Dave Chinner      2021-06-18  733  	 * Pull all the log vectors off the items in the CIL, and remove the
bad77c375e8de6 Dave Chinner      2021-06-18  734  	 * items from the CIL. We don't need the CIL lock here because it's only
bad77c375e8de6 Dave Chinner      2021-06-18  735  	 * needed on the transaction commit side which is currently locked out
bad77c375e8de6 Dave Chinner      2021-06-18  736  	 * by the flush lock.
71e330b593905e Dave Chinner      2010-05-21  737  	 */
71e330b593905e Dave Chinner      2010-05-21  738  	lv = NULL;
71e330b593905e Dave Chinner      2010-05-21  739  	num_iovecs = 0;
71e330b593905e Dave Chinner      2010-05-21  740  	while (!list_empty(&cil->xc_cil)) {
71e330b593905e Dave Chinner      2010-05-21  741  		struct xfs_log_item	*item;
71e330b593905e Dave Chinner      2010-05-21  742  
71e330b593905e Dave Chinner      2010-05-21  743  		item = list_first_entry(&cil->xc_cil,
71e330b593905e Dave Chinner      2010-05-21  744  					struct xfs_log_item, li_cil);
71e330b593905e Dave Chinner      2010-05-21  745  		list_del_init(&item->li_cil);
71e330b593905e Dave Chinner      2010-05-21  746  		if (!ctx->lv_chain)
71e330b593905e Dave Chinner      2010-05-21  747  			ctx->lv_chain = item->li_lv;
71e330b593905e Dave Chinner      2010-05-21  748  		else
71e330b593905e Dave Chinner      2010-05-21  749  			lv->lv_next = item->li_lv;
71e330b593905e Dave Chinner      2010-05-21  750  		lv = item->li_lv;
71e330b593905e Dave Chinner      2010-05-21  751  		item->li_lv = NULL;
71e330b593905e Dave Chinner      2010-05-21  752  		num_iovecs += lv->lv_niovecs;
71e330b593905e Dave Chinner      2010-05-21  753  	}
71e330b593905e Dave Chinner      2010-05-21  754  
71e330b593905e Dave Chinner      2010-05-21  755  	/*
71e330b593905e Dave Chinner      2010-05-21  756  	 * initialise the new context and attach it to the CIL. Then attach
c7f87f3984cfa1 Dave Chinner      2020-06-16  757  	 * the current context to the CIL committing list so it can be found
71e330b593905e Dave Chinner      2010-05-21  758  	 * during log forces to extract the commit lsn of the sequence that
71e330b593905e Dave Chinner      2010-05-21  759  	 * needs to be forced.
71e330b593905e Dave Chinner      2010-05-21  760  	 */
71e330b593905e Dave Chinner      2010-05-21  761  	INIT_LIST_HEAD(&new_ctx->committing);
71e330b593905e Dave Chinner      2010-05-21  762  	INIT_LIST_HEAD(&new_ctx->busy_extents);
71e330b593905e Dave Chinner      2010-05-21  763  	new_ctx->sequence = ctx->sequence + 1;
71e330b593905e Dave Chinner      2010-05-21  764  	new_ctx->cil = cil;
71e330b593905e Dave Chinner      2010-05-21  765  	cil->xc_ctx = new_ctx;
71e330b593905e Dave Chinner      2010-05-21  766  
71e330b593905e Dave Chinner      2010-05-21  767  	/*
71e330b593905e Dave Chinner      2010-05-21  768  	 * The switch is now done, so we can drop the context lock and move out
71e330b593905e Dave Chinner      2010-05-21  769  	 * of a shared context. We can't just go straight to the commit record,
71e330b593905e Dave Chinner      2010-05-21  770  	 * though - we need to synchronise with previous and future commits so
71e330b593905e Dave Chinner      2010-05-21  771  	 * that the commit records are correctly ordered in the log to ensure
71e330b593905e Dave Chinner      2010-05-21  772  	 * that we process items during log IO completion in the correct order.
71e330b593905e Dave Chinner      2010-05-21  773  	 *
71e330b593905e Dave Chinner      2010-05-21  774  	 * For example, if we get an EFI in one checkpoint and the EFD in the
71e330b593905e Dave Chinner      2010-05-21  775  	 * next (e.g. due to log forces), we do not want the checkpoint with
71e330b593905e Dave Chinner      2010-05-21  776  	 * the EFD to be committed before the checkpoint with the EFI.  Hence
71e330b593905e Dave Chinner      2010-05-21  777  	 * we must strictly order the commit records of the checkpoints so
71e330b593905e Dave Chinner      2010-05-21  778  	 * that: a) the checkpoint callbacks are attached to the iclogs in the
71e330b593905e Dave Chinner      2010-05-21  779  	 * correct order; and b) the checkpoints are replayed in correct order
71e330b593905e Dave Chinner      2010-05-21  780  	 * in log recovery.
71e330b593905e Dave Chinner      2010-05-21  781  	 *
71e330b593905e Dave Chinner      2010-05-21  782  	 * Hence we need to add this context to the committing context list so
71e330b593905e Dave Chinner      2010-05-21  783  	 * that higher sequences will wait for us to write out a commit record
71e330b593905e Dave Chinner      2010-05-21  784  	 * before they do.
f876e44603ad09 Dave Chinner      2014-02-27  785  	 *
f876e44603ad09 Dave Chinner      2014-02-27  786  	 * xfs_log_force_lsn requires us to mirror the new sequence into the cil
f876e44603ad09 Dave Chinner      2014-02-27  787  	 * structure atomically with the addition of this sequence to the
f876e44603ad09 Dave Chinner      2014-02-27  788  	 * committing list. This also ensures that we can do unlocked checks
f876e44603ad09 Dave Chinner      2014-02-27  789  	 * against the current sequence in log forces without risking
f876e44603ad09 Dave Chinner      2014-02-27  790  	 * deferencing a freed context pointer.
71e330b593905e Dave Chinner      2010-05-21  791  	 */
4bb928cdb900d0 Dave Chinner      2013-08-12  792  	spin_lock(&cil->xc_push_lock);
f876e44603ad09 Dave Chinner      2014-02-27  793  	cil->xc_current_sequence = new_ctx->sequence;
4bb928cdb900d0 Dave Chinner      2013-08-12  794  	spin_unlock(&cil->xc_push_lock);
71e330b593905e Dave Chinner      2010-05-21  795  	up_write(&cil->xc_ctx_lock);
71e330b593905e Dave Chinner      2010-05-21  796  
71e330b593905e Dave Chinner      2010-05-21  797  	/*
71e330b593905e Dave Chinner      2010-05-21  798  	 * Build a checkpoint transaction header and write it to the log to
71e330b593905e Dave Chinner      2010-05-21  799  	 * begin the transaction. We need to account for the space used by the
71e330b593905e Dave Chinner      2010-05-21  800  	 * transaction header here as it is not accounted for in xlog_write().
71e330b593905e Dave Chinner      2010-05-21  801  	 *
71e330b593905e Dave Chinner      2010-05-21  802  	 * The LSN we need to pass to the log items on transaction commit is
71e330b593905e Dave Chinner      2010-05-21  803  	 * the LSN reported by the first log vector write. If we use the commit
71e330b593905e Dave Chinner      2010-05-21  804  	 * record lsn then we can move the tail beyond the grant write head.
71e330b593905e Dave Chinner      2010-05-21  805  	 */
71e330b593905e Dave Chinner      2010-05-21  806  	tic = ctx->ticket;
71e330b593905e Dave Chinner      2010-05-21  807  	thdr.th_magic = XFS_TRANS_HEADER_MAGIC;
71e330b593905e Dave Chinner      2010-05-21  808  	thdr.th_type = XFS_TRANS_CHECKPOINT;
71e330b593905e Dave Chinner      2010-05-21  809  	thdr.th_tid = tic->t_tid;
71e330b593905e Dave Chinner      2010-05-21  810  	thdr.th_num_items = num_iovecs;
4e0d5f926b80b0 Christoph Hellwig 2010-06-23  811  	lhdr.i_addr = &thdr;
71e330b593905e Dave Chinner      2010-05-21  812  	lhdr.i_len = sizeof(xfs_trans_header_t);
71e330b593905e Dave Chinner      2010-05-21  813  	lhdr.i_type = XLOG_REG_TYPE_TRANSHDR;
71e330b593905e Dave Chinner      2010-05-21  814  	tic->t_curr_res -= lhdr.i_len + sizeof(xlog_op_header_t);
71e330b593905e Dave Chinner      2010-05-21  815  
71e330b593905e Dave Chinner      2010-05-21  816  	lvhdr.lv_niovecs = 1;
71e330b593905e Dave Chinner      2010-05-21  817  	lvhdr.lv_iovecp = &lhdr;
71e330b593905e Dave Chinner      2010-05-21  818  	lvhdr.lv_next = ctx->lv_chain;
71e330b593905e Dave Chinner      2010-05-21  819  
bad77c375e8de6 Dave Chinner      2021-06-18  820  	/*
bad77c375e8de6 Dave Chinner      2021-06-18  821  	 * Before we format and submit the first iclog, we have to ensure that
bad77c375e8de6 Dave Chinner      2021-06-18  822  	 * the metadata writeback ordering cache flush is complete.
bad77c375e8de6 Dave Chinner      2021-06-18  823  	 */
bad77c375e8de6 Dave Chinner      2021-06-18  824  	wait_for_completion(&bdev_flush);
bad77c375e8de6 Dave Chinner      2021-06-18  825  
3468bb1ca6e884 Dave Chinner      2021-06-18  826  	error = xlog_write(log, &lvhdr, tic, &ctx->start_lsn, NULL,
3468bb1ca6e884 Dave Chinner      2021-06-18  827  				XLOG_START_TRANS);
71e330b593905e Dave Chinner      2010-05-21  828  	if (error)
7db37c5e6575b2 Dave Chinner      2011-01-27  829  		goto out_abort_free_ticket;
71e330b593905e Dave Chinner      2010-05-21  830  
71e330b593905e Dave Chinner      2010-05-21  831  	/*
71e330b593905e Dave Chinner      2010-05-21  832  	 * now that we've written the checkpoint into the log, strictly
71e330b593905e Dave Chinner      2010-05-21  833  	 * order the commit records so replay will get them in the right order.
71e330b593905e Dave Chinner      2010-05-21  834  	 */
71e330b593905e Dave Chinner      2010-05-21  835  restart:
4bb928cdb900d0 Dave Chinner      2013-08-12  836  	spin_lock(&cil->xc_push_lock);
71e330b593905e Dave Chinner      2010-05-21  837  	list_for_each_entry(new_ctx, &cil->xc_committing, committing) {
ac983517ec5941 Dave Chinner      2014-05-07  838  		/*
ac983517ec5941 Dave Chinner      2014-05-07  839  		 * Avoid getting stuck in this loop because we were woken by the
ac983517ec5941 Dave Chinner      2014-05-07  840  		 * shutdown, but then went back to sleep once already in the
ac983517ec5941 Dave Chinner      2014-05-07  841  		 * shutdown state.
ac983517ec5941 Dave Chinner      2014-05-07  842  		 */
ac983517ec5941 Dave Chinner      2014-05-07  843  		if (XLOG_FORCED_SHUTDOWN(log)) {
ac983517ec5941 Dave Chinner      2014-05-07  844  			spin_unlock(&cil->xc_push_lock);
ac983517ec5941 Dave Chinner      2014-05-07  845  			goto out_abort_free_ticket;
ac983517ec5941 Dave Chinner      2014-05-07  846  		}
ac983517ec5941 Dave Chinner      2014-05-07  847  
71e330b593905e Dave Chinner      2010-05-21  848  		/*
71e330b593905e Dave Chinner      2010-05-21  849  		 * Higher sequences will wait for this one so skip them.
ac983517ec5941 Dave Chinner      2014-05-07  850  		 * Don't wait for our own sequence, either.
71e330b593905e Dave Chinner      2010-05-21  851  		 */
71e330b593905e Dave Chinner      2010-05-21  852  		if (new_ctx->sequence >= ctx->sequence)
71e330b593905e Dave Chinner      2010-05-21  853  			continue;
71e330b593905e Dave Chinner      2010-05-21  854  		if (!new_ctx->commit_lsn) {
71e330b593905e Dave Chinner      2010-05-21  855  			/*
71e330b593905e Dave Chinner      2010-05-21  856  			 * It is still being pushed! Wait for the push to
71e330b593905e Dave Chinner      2010-05-21  857  			 * complete, then start again from the beginning.
71e330b593905e Dave Chinner      2010-05-21  858  			 */
4bb928cdb900d0 Dave Chinner      2013-08-12  859  			xlog_wait(&cil->xc_commit_wait, &cil->xc_push_lock);
71e330b593905e Dave Chinner      2010-05-21  860  			goto restart;
71e330b593905e Dave Chinner      2010-05-21  861  		}
71e330b593905e Dave Chinner      2010-05-21  862  	}
4bb928cdb900d0 Dave Chinner      2013-08-12  863  	spin_unlock(&cil->xc_push_lock);
71e330b593905e Dave Chinner      2010-05-21  864  
f10e925def9a6d Dave Chinner      2020-03-25  865  	error = xlog_commit_record(log, tic, &commit_iclog, &commit_lsn);
dd401770b0ff68 Dave Chinner      2020-03-25  866  	if (error)
dd401770b0ff68 Dave Chinner      2020-03-25  867  		goto out_abort_free_ticket;
dd401770b0ff68 Dave Chinner      2020-03-25  868  
8b41e3f98e6ca1 Christoph Hellwig 2020-03-25  869  	xfs_log_ticket_ungrant(log, tic);
71e330b593905e Dave Chinner      2010-05-21  870  
89ae379d564c5d Christoph Hellwig 2019-06-28  871  	spin_lock(&commit_iclog->ic_callback_lock);
1858bb0bec612d Christoph Hellwig 2019-10-14  872  	if (commit_iclog->ic_state == XLOG_STATE_IOERROR) {
89ae379d564c5d Christoph Hellwig 2019-06-28  873  		spin_unlock(&commit_iclog->ic_callback_lock);
71e330b593905e Dave Chinner      2010-05-21  874  		goto out_abort;
89ae379d564c5d Christoph Hellwig 2019-06-28  875  	}
89ae379d564c5d Christoph Hellwig 2019-06-28  876  	ASSERT_ALWAYS(commit_iclog->ic_state == XLOG_STATE_ACTIVE ||
89ae379d564c5d Christoph Hellwig 2019-06-28  877  		      commit_iclog->ic_state == XLOG_STATE_WANT_SYNC);
89ae379d564c5d Christoph Hellwig 2019-06-28  878  	list_add_tail(&ctx->iclog_entry, &commit_iclog->ic_callbacks);
89ae379d564c5d Christoph Hellwig 2019-06-28  879  	spin_unlock(&commit_iclog->ic_callback_lock);
71e330b593905e Dave Chinner      2010-05-21  880  
71e330b593905e Dave Chinner      2010-05-21  881  	/*
71e330b593905e Dave Chinner      2010-05-21  882  	 * now the checkpoint commit is complete and we've attached the
71e330b593905e Dave Chinner      2010-05-21  883  	 * callbacks to the iclog we can assign the commit LSN to the context
71e330b593905e Dave Chinner      2010-05-21  884  	 * and wake up anyone who is waiting for the commit to complete.
71e330b593905e Dave Chinner      2010-05-21  885  	 */
4bb928cdb900d0 Dave Chinner      2013-08-12  886  	spin_lock(&cil->xc_push_lock);
71e330b593905e Dave Chinner      2010-05-21  887  	ctx->commit_lsn = commit_lsn;
eb40a87500ac2f Dave Chinner      2010-12-21  888  	wake_up_all(&cil->xc_commit_wait);
4bb928cdb900d0 Dave Chinner      2013-08-12  889  	spin_unlock(&cil->xc_push_lock);
71e330b593905e Dave Chinner      2010-05-21  890  
a79b28c284fd91 Dave Chinner      2021-06-18  891  	/*
a79b28c284fd91 Dave Chinner      2021-06-18  892  	 * If the checkpoint spans multiple iclogs, wait for all previous
eef983ffeae7a1 Dave Chinner      2021-06-18  893  	 * iclogs to complete before we submit the commit_iclog. In this case,
eef983ffeae7a1 Dave Chinner      2021-06-18  894  	 * the commit_iclog write needs to issue a pre-flush so that the
eef983ffeae7a1 Dave Chinner      2021-06-18  895  	 * ordering is correctly preserved down to stable storage.
a79b28c284fd91 Dave Chinner      2021-06-18  896  	 */
a79b28c284fd91 Dave Chinner      2021-06-18 @897  	spin_lock(&log->l_icloglock);
eef983ffeae7a1 Dave Chinner      2021-06-18  898  	if (ctx->start_lsn != commit_lsn) {
a79b28c284fd91 Dave Chinner      2021-06-18  899  		xlog_wait_on_iclog(commit_iclog->ic_prev);
eef983ffeae7a1 Dave Chinner      2021-06-18 @900  		spin_lock(&log->l_icloglock);
eef983ffeae7a1 Dave Chinner      2021-06-18  901  		commit_iclog->ic_flags |= XLOG_ICL_NEED_FLUSH;
a79b28c284fd91 Dave Chinner      2021-06-18  902  	}
a79b28c284fd91 Dave Chinner      2021-06-18  903  
eef983ffeae7a1 Dave Chinner      2021-06-18  904  	/*
eef983ffeae7a1 Dave Chinner      2021-06-18  905  	 * The commit iclog must be written to stable storage to guarantee
eef983ffeae7a1 Dave Chinner      2021-06-18  906  	 * journal IO vs metadata writeback IO is correctly ordered on stable
eef983ffeae7a1 Dave Chinner      2021-06-18  907  	 * storage.
eef983ffeae7a1 Dave Chinner      2021-06-18  908  	 */
eef983ffeae7a1 Dave Chinner      2021-06-18  909  	commit_iclog->ic_flags |= XLOG_ICL_NEED_FUA;
eef983ffeae7a1 Dave Chinner      2021-06-18  910  	xlog_state_release_iclog(log, commit_iclog);
eef983ffeae7a1 Dave Chinner      2021-06-18  911  	spin_unlock(&log->l_icloglock);
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  912  	return;
71e330b593905e Dave Chinner      2010-05-21  913  
71e330b593905e Dave Chinner      2010-05-21  914  out_skip:
71e330b593905e Dave Chinner      2010-05-21  915  	up_write(&cil->xc_ctx_lock);
71e330b593905e Dave Chinner      2010-05-21  916  	xfs_log_ticket_put(new_ctx->ticket);
71e330b593905e Dave Chinner      2010-05-21  917  	kmem_free(new_ctx);
c7cc296ddd1f6d Christoph Hellwig 2020-03-20  918  	return;
71e330b593905e Dave Chinner      2010-05-21  919  
7db37c5e6575b2 Dave Chinner      2011-01-27  920  out_abort_free_ticket:
8b41e3f98e6ca1 Christoph Hellwig 2020-03-25  921  	xfs_log_ticket_ungrant(log, tic);
71e330b593905e Dave Chinner      2010-05-21  922  out_abort:
12e6a0f449d585 Christoph Hellwig 2020-03-20  923  	ASSERT(XLOG_FORCED_SHUTDOWN(log));
12e6a0f449d585 Christoph Hellwig 2020-03-20  924  	xlog_cil_committed(ctx);
4c2d542f2e7865 Dave Chinner      2012-04-23  925  }
4c2d542f2e7865 Dave Chinner      2012-04-23  926  

:::::: The code at line 897 was first introduced by commit
:::::: a79b28c284fd910bb291dbf307a26f4d432e88f3 xfs: separate CIL commit record IO

:::::: TO: Dave Chinner <dchinner@redhat.com>
:::::: CC: Darrick J. Wong <djwong@kernel.org>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-12-04  8:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-04  8:51 fs/xfs/xfs_log_cil.c:897:1-10: second lock on line 900 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.