|
@@ -708,13 +708,14 @@ xfs_inode_item_committed(
|
|
|
* marked delayed write. If that's the case, we'll promote it and that will
|
|
|
* allow the caller to write the buffer by triggering the xfsbufd to run.
|
|
|
*/
|
|
|
-STATIC void
|
|
|
+STATIC bool
|
|
|
xfs_inode_item_pushbuf(
|
|
|
struct xfs_log_item *lip)
|
|
|
{
|
|
|
struct xfs_inode_log_item *iip = INODE_ITEM(lip);
|
|
|
struct xfs_inode *ip = iip->ili_inode;
|
|
|
struct xfs_buf *bp;
|
|
|
+ bool ret = true;
|
|
|
|
|
|
ASSERT(xfs_isilocked(ip, XFS_ILOCK_SHARED));
|
|
|
|
|
@@ -725,7 +726,7 @@ xfs_inode_item_pushbuf(
|
|
|
if (completion_done(&ip->i_flush) ||
|
|
|
!(lip->li_flags & XFS_LI_IN_AIL)) {
|
|
|
xfs_iunlock(ip, XFS_ILOCK_SHARED);
|
|
|
- return;
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
bp = xfs_incore(ip->i_mount->m_ddev_targp, iip->ili_format.ilf_blkno,
|
|
@@ -733,10 +734,13 @@ xfs_inode_item_pushbuf(
|
|
|
|
|
|
xfs_iunlock(ip, XFS_ILOCK_SHARED);
|
|
|
if (!bp)
|
|
|
- return;
|
|
|
+ return true;
|
|
|
if (XFS_BUF_ISDELAYWRITE(bp))
|
|
|
xfs_buf_delwri_promote(bp);
|
|
|
+ if (xfs_buf_ispinned(bp))
|
|
|
+ ret = false;
|
|
|
xfs_buf_relse(bp);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
/*
|