diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2011-07-27 00:54:47 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2011-07-27 00:54:47 -0700 | 
| commit | aa7eb8e78d8ecd6cd0475d86ea8385ff9cb47ece (patch) | |
| tree | 3f9e98fadd5124fb05e8f6f9b06aa23698d4f215 /fs/xfs/xfs_log.c | |
| parent | cca8edfd2ec2a34d9f50f593bc753bb11e1bc1f5 (diff) | |
| parent | 3c6b50141ef9f0a8844bf1357b80c0cdf518bf05 (diff) | |
Merge branch 'next' into for-linus
Diffstat (limited to 'fs/xfs/xfs_log.c')
| -rw-r--r-- | fs/xfs/xfs_log.c | 26 | 
1 files changed, 17 insertions, 9 deletions
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index b612ce4520ae..41d5b8f2bf92 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -1372,8 +1372,17 @@ xlog_sync(xlog_t		*log,  	XFS_BUF_ASYNC(bp);  	bp->b_flags |= XBF_LOG_BUFFER; -	if (log->l_mp->m_flags & XFS_MOUNT_BARRIER) +	if (log->l_mp->m_flags & XFS_MOUNT_BARRIER) { +		/* +		 * If we have an external log device, flush the data device +		 * before flushing the log to make sure all meta data +		 * written back from the AIL actually made it to disk +		 * before writing out the new log tail LSN in the log buffer. +		 */ +		if (log->l_mp->m_logdev_targp != log->l_mp->m_ddev_targp) +			xfs_blkdev_issue_flush(log->l_mp->m_ddev_targp);  		XFS_BUF_ORDERED(bp); +	}  	ASSERT(XFS_BUF_ADDR(bp) <= log->l_logBBsize-1);  	ASSERT(XFS_BUF_ADDR(bp) + BTOBB(count) <= log->l_logBBsize); @@ -1449,6 +1458,13 @@ xlog_dealloc_log(xlog_t *log)  	xlog_cil_destroy(log); +	/* +	 * always need to ensure that the extra buffer does not point to memory +	 * owned by another log buffer before we free it. +	 */ +	xfs_buf_set_empty(log->l_xbuf, log->l_iclog_size); +	xfs_buf_free(log->l_xbuf); +  	iclog = log->l_iclog;  	for (i=0; i<log->l_iclog_bufs; i++) {  		xfs_buf_free(iclog->ic_bp); @@ -1458,7 +1474,6 @@ xlog_dealloc_log(xlog_t *log)  	}  	spinlock_destroy(&log->l_icloglock); -	xfs_buf_free(log->l_xbuf);  	log->l_mp->m_log = NULL;  	kmem_free(log);  }	/* xlog_dealloc_log */ @@ -3248,13 +3263,6 @@ xfs_log_ticket_get(  	return ticket;  } -xlog_tid_t -xfs_log_get_trans_ident( -	struct xfs_trans	*tp) -{ -	return tp->t_ticket->t_tid; -} -  /*   * Allocate and initialise a new log ticket.   */  | 
