diff options
Diffstat (limited to 'fs/xfs')
| -rw-r--r-- | fs/xfs/xfs_log_cil.c | 10 | ||||
| -rw-r--r-- | fs/xfs/xfs_log_priv.h | 2 | 
2 files changed, 6 insertions, 6 deletions
| diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c index b43f0e8f43f2..9ed90368ab31 100644 --- a/fs/xfs/xfs_log_cil.c +++ b/fs/xfs/xfs_log_cil.c @@ -671,7 +671,8 @@ xlog_cil_push_work(  	/*  	 * Wake up any background push waiters now this context is being pushed.  	 */ -	wake_up_all(&ctx->push_wait); +	if (ctx->space_used >= XLOG_CIL_BLOCKING_SPACE_LIMIT(log)) +		wake_up_all(&cil->xc_push_wait);  	/*  	 * Check if we've anything to push. If there is nothing, then we don't @@ -743,13 +744,12 @@ xlog_cil_push_work(  	/*  	 * initialise the new context and attach it to the CIL. Then attach -	 * the current context to the CIL committing lsit so it can be found +	 * the current context to the CIL committing list so it can be found  	 * during log forces to extract the commit lsn of the sequence that  	 * needs to be forced.  	 */  	INIT_LIST_HEAD(&new_ctx->committing);  	INIT_LIST_HEAD(&new_ctx->busy_extents); -	init_waitqueue_head(&new_ctx->push_wait);  	new_ctx->sequence = ctx->sequence + 1;  	new_ctx->cil = cil;  	cil->xc_ctx = new_ctx; @@ -937,7 +937,7 @@ xlog_cil_push_background(  	if (cil->xc_ctx->space_used >= XLOG_CIL_BLOCKING_SPACE_LIMIT(log)) {  		trace_xfs_log_cil_wait(log, cil->xc_ctx->ticket);  		ASSERT(cil->xc_ctx->space_used < log->l_logsize); -		xlog_wait(&cil->xc_ctx->push_wait, &cil->xc_push_lock); +		xlog_wait(&cil->xc_push_wait, &cil->xc_push_lock);  		return;  	} @@ -1216,12 +1216,12 @@ xlog_cil_init(  	INIT_LIST_HEAD(&cil->xc_committing);  	spin_lock_init(&cil->xc_cil_lock);  	spin_lock_init(&cil->xc_push_lock); +	init_waitqueue_head(&cil->xc_push_wait);  	init_rwsem(&cil->xc_ctx_lock);  	init_waitqueue_head(&cil->xc_commit_wait);  	INIT_LIST_HEAD(&ctx->committing);  	INIT_LIST_HEAD(&ctx->busy_extents); -	init_waitqueue_head(&ctx->push_wait);  	ctx->sequence = 1;  	ctx->cil = cil;  	cil->xc_ctx = ctx; diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h index ec22c7a3867f..75a62870b63a 100644 --- a/fs/xfs/xfs_log_priv.h +++ b/fs/xfs/xfs_log_priv.h @@ -240,7 +240,6 @@ struct xfs_cil_ctx {  	struct xfs_log_vec	*lv_chain;	/* logvecs being pushed */  	struct list_head	iclog_entry;  	struct list_head	committing;	/* ctx committing list */ -	wait_queue_head_t	push_wait;	/* background push throttle */  	struct work_struct	discard_endio_work;  }; @@ -274,6 +273,7 @@ struct xfs_cil {  	wait_queue_head_t	xc_commit_wait;  	xfs_lsn_t		xc_current_sequence;  	struct work_struct	xc_push_work; +	wait_queue_head_t	xc_push_wait;	/* background push throttle */  } ____cacheline_aligned_in_smp;  /* |