[XFS] Fix remount vs no/barrier options by ensuring we clear unwanted
flags from iclog buffers before submitting them for writing. SGI-PV: 954772 SGI-Modid: xfs-linux-melb:xfs-kern:26605a Signed-off-by: Nathan Scott <nathans@sgi.com>
This commit is contained in:
@@ -246,8 +246,8 @@ extern void xfs_buf_trace(xfs_buf_t *, char *, void *, void *);
|
|||||||
#define BUF_BUSY XBF_DONT_BLOCK
|
#define BUF_BUSY XBF_DONT_BLOCK
|
||||||
|
|
||||||
#define XFS_BUF_BFLAGS(bp) ((bp)->b_flags)
|
#define XFS_BUF_BFLAGS(bp) ((bp)->b_flags)
|
||||||
#define XFS_BUF_ZEROFLAGS(bp) \
|
#define XFS_BUF_ZEROFLAGS(bp) ((bp)->b_flags &= \
|
||||||
((bp)->b_flags &= ~(XBF_READ|XBF_WRITE|XBF_ASYNC|XBF_DELWRI))
|
~(XBF_READ|XBF_WRITE|XBF_ASYNC|XBF_DELWRI|XBF_ORDERED))
|
||||||
|
|
||||||
#define XFS_BUF_STALE(bp) ((bp)->b_flags |= XFS_B_STALE)
|
#define XFS_BUF_STALE(bp) ((bp)->b_flags |= XFS_B_STALE)
|
||||||
#define XFS_BUF_UNSTALE(bp) ((bp)->b_flags &= ~XFS_B_STALE)
|
#define XFS_BUF_UNSTALE(bp) ((bp)->b_flags &= ~XFS_B_STALE)
|
||||||
|
@@ -1430,15 +1430,14 @@ xlog_sync(xlog_t *log,
|
|||||||
}
|
}
|
||||||
XFS_BUF_SET_PTR(bp, (xfs_caddr_t) &(iclog->ic_header), count);
|
XFS_BUF_SET_PTR(bp, (xfs_caddr_t) &(iclog->ic_header), count);
|
||||||
XFS_BUF_SET_FSPRIVATE(bp, iclog); /* save for later */
|
XFS_BUF_SET_FSPRIVATE(bp, iclog); /* save for later */
|
||||||
|
XFS_BUF_ZEROFLAGS(bp);
|
||||||
XFS_BUF_BUSY(bp);
|
XFS_BUF_BUSY(bp);
|
||||||
XFS_BUF_ASYNC(bp);
|
XFS_BUF_ASYNC(bp);
|
||||||
/*
|
/*
|
||||||
* Do an ordered write for the log block.
|
* Do an ordered write for the log block.
|
||||||
*
|
* Its unnecessary to flush the first split block in the log wrap case.
|
||||||
* It may not be needed to flush the first split block in the log wrap
|
|
||||||
* case, but do it anyways to be safe -AK
|
|
||||||
*/
|
*/
|
||||||
if (log->l_mp->m_flags & XFS_MOUNT_BARRIER)
|
if (!split && (log->l_mp->m_flags & XFS_MOUNT_BARRIER))
|
||||||
XFS_BUF_ORDERED(bp);
|
XFS_BUF_ORDERED(bp);
|
||||||
|
|
||||||
ASSERT(XFS_BUF_ADDR(bp) <= log->l_logBBsize-1);
|
ASSERT(XFS_BUF_ADDR(bp) <= log->l_logBBsize-1);
|
||||||
@@ -1468,6 +1467,7 @@ xlog_sync(xlog_t *log,
|
|||||||
XFS_BUF_SET_PTR(bp, (xfs_caddr_t)((__psint_t)&(iclog->ic_header)+
|
XFS_BUF_SET_PTR(bp, (xfs_caddr_t)((__psint_t)&(iclog->ic_header)+
|
||||||
(__psint_t)count), split);
|
(__psint_t)count), split);
|
||||||
XFS_BUF_SET_FSPRIVATE(bp, iclog);
|
XFS_BUF_SET_FSPRIVATE(bp, iclog);
|
||||||
|
XFS_BUF_ZEROFLAGS(bp);
|
||||||
XFS_BUF_BUSY(bp);
|
XFS_BUF_BUSY(bp);
|
||||||
XFS_BUF_ASYNC(bp);
|
XFS_BUF_ASYNC(bp);
|
||||||
if (log->l_mp->m_flags & XFS_MOUNT_BARRIER)
|
if (log->l_mp->m_flags & XFS_MOUNT_BARRIER)
|
||||||
|
Reference in New Issue
Block a user