diff options
Diffstat (limited to 'fs/xfs/xfs_inode_item.c')
| -rw-r--r-- | fs/xfs/xfs_inode_item.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c index 588406dc6a3..836ad80d4f2 100644 --- a/fs/xfs/xfs_inode_item.c +++ b/fs/xfs/xfs_inode_item.c @@ -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;  }  /*  |