diff options
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/quota/xfs_dquot.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/fs/xfs/quota/xfs_dquot.c b/fs/xfs/quota/xfs_dquot.c index f9baeedbfdfe..1620a56b067e 100644 --- a/fs/xfs/quota/xfs_dquot.c +++ b/fs/xfs/quota/xfs_dquot.c | |||
@@ -1528,21 +1528,16 @@ xfs_qm_dqflock_pushbuf_wait( | |||
1528 | */ | 1528 | */ |
1529 | bp = xfs_incore(dqp->q_mount->m_ddev_targp, dqp->q_blkno, | 1529 | bp = xfs_incore(dqp->q_mount->m_ddev_targp, dqp->q_blkno, |
1530 | XFS_QI_DQCHUNKLEN(dqp->q_mount), XBF_TRYLOCK); | 1530 | XFS_QI_DQCHUNKLEN(dqp->q_mount), XBF_TRYLOCK); |
1531 | if (bp != NULL) { | 1531 | if (!bp) |
1532 | if (XFS_BUF_ISDELAYWRITE(bp)) { | 1532 | goto out_lock; |
1533 | int error; | 1533 | |
1534 | 1534 | if (XFS_BUF_ISDELAYWRITE(bp)) { | |
1535 | if (XFS_BUF_ISPINNED(bp)) | 1535 | if (XFS_BUF_ISPINNED(bp)) |
1536 | xfs_log_force(dqp->q_mount, 0); | 1536 | xfs_log_force(dqp->q_mount, 0); |
1537 | error = xfs_bawrite(dqp->q_mount, bp); | 1537 | xfs_buf_delwri_promote(bp); |
1538 | if (error) | 1538 | wake_up_process(bp->b_target->bt_task); |
1539 | xfs_fs_cmn_err(CE_WARN, dqp->q_mount, | ||
1540 | "xfs_qm_dqflock_pushbuf_wait: " | ||
1541 | "pushbuf error %d on dqp %p, bp %p", | ||
1542 | error, dqp, bp); | ||
1543 | } else { | ||
1544 | xfs_buf_relse(bp); | ||
1545 | } | ||
1546 | } | 1539 | } |
1540 | xfs_buf_relse(bp); | ||
1541 | out_lock: | ||
1547 | xfs_dqflock(dqp); | 1542 | xfs_dqflock(dqp); |
1548 | } | 1543 | } |