mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-06 06:37:59 +00:00
[XFS] Ensure xfs_bawrite() errors are checked.
xfs_bawrite() can return immediate error status on async writes. Unlike xfsbdstrat() we don't ever check the error on the buffer after the call, so we currently do not catch errors at all here. Ensure we catch and propagate or warn to the syslog about up-front async write errors. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30824a Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Niv Sardi <xaiki@sgi.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
parent
d64e31a2f5
commit
db7a19f2c8
5 changed files with 28 additions and 6 deletions
|
@ -1291,7 +1291,7 @@ xfs_qm_dqflush(
|
|||
if (flags & XFS_QMOPT_DELWRI) {
|
||||
xfs_bdwrite(mp, bp);
|
||||
} else if (flags & XFS_QMOPT_ASYNC) {
|
||||
xfs_bawrite(mp, bp);
|
||||
error = xfs_bawrite(mp, bp);
|
||||
} else {
|
||||
error = xfs_bwrite(mp, bp);
|
||||
}
|
||||
|
@ -1582,12 +1582,18 @@ xfs_qm_dqflock_pushbuf_wait(
|
|||
XFS_INCORE_TRYLOCK);
|
||||
if (bp != NULL) {
|
||||
if (XFS_BUF_ISDELAYWRITE(bp)) {
|
||||
int error;
|
||||
if (XFS_BUF_ISPINNED(bp)) {
|
||||
xfs_log_force(dqp->q_mount,
|
||||
(xfs_lsn_t)0,
|
||||
XFS_LOG_FORCE);
|
||||
}
|
||||
xfs_bawrite(dqp->q_mount, bp);
|
||||
error = xfs_bawrite(dqp->q_mount, bp);
|
||||
if (error)
|
||||
xfs_fs_cmn_err(CE_WARN, dqp->q_mount,
|
||||
"xfs_qm_dqflock_pushbuf_wait: "
|
||||
"pushbuf error %d on dqp %p, bp %p",
|
||||
error, dqp, bp);
|
||||
} else {
|
||||
xfs_buf_relse(bp);
|
||||
}
|
||||
|
|
|
@ -267,11 +267,16 @@ xfs_qm_dquot_logitem_pushbuf(
|
|||
XFS_LOG_FORCE);
|
||||
}
|
||||
if (dopush) {
|
||||
int error;
|
||||
#ifdef XFSRACEDEBUG
|
||||
delay_for_intr();
|
||||
delay(300);
|
||||
#endif
|
||||
xfs_bawrite(mp, bp);
|
||||
error = xfs_bawrite(mp, bp);
|
||||
if (error)
|
||||
xfs_fs_cmn_err(CE_WARN, mp,
|
||||
"xfs_qm_dquot_logitem_pushbuf: pushbuf error %d on qip %p, bp %p",
|
||||
error, qip, bp);
|
||||
} else {
|
||||
xfs_buf_relse(bp);
|
||||
}
|
||||
|
|
|
@ -645,7 +645,12 @@ xfs_buf_item_push(
|
|||
bp = bip->bli_buf;
|
||||
|
||||
if (XFS_BUF_ISDELAYWRITE(bp)) {
|
||||
xfs_bawrite(bip->bli_item.li_mountp, bp);
|
||||
int error;
|
||||
error = xfs_bawrite(bip->bli_item.li_mountp, bp);
|
||||
if (error)
|
||||
xfs_fs_cmn_err(CE_WARN, bip->bli_item.li_mountp,
|
||||
"xfs_buf_item_push: pushbuf error %d on bip %p, bp %p",
|
||||
error, bip, bp);
|
||||
} else {
|
||||
xfs_buf_relse(bp);
|
||||
}
|
||||
|
|
|
@ -3276,7 +3276,7 @@ xfs_iflush(
|
|||
if (flags & INT_DELWRI) {
|
||||
xfs_bdwrite(mp, bp);
|
||||
} else if (flags & INT_ASYNC) {
|
||||
xfs_bawrite(mp, bp);
|
||||
error = xfs_bawrite(mp, bp);
|
||||
} else {
|
||||
error = xfs_bwrite(mp, bp);
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "xfs_btree.h"
|
||||
#include "xfs_ialloc.h"
|
||||
#include "xfs_rw.h"
|
||||
#include "xfs_error.h"
|
||||
|
||||
|
||||
kmem_zone_t *xfs_ili_zone; /* inode log item zone */
|
||||
|
@ -813,7 +814,12 @@ xfs_inode_item_pushbuf(
|
|||
XFS_LOG_FORCE);
|
||||
}
|
||||
if (dopush) {
|
||||
xfs_bawrite(mp, bp);
|
||||
int error;
|
||||
error = xfs_bawrite(mp, bp);
|
||||
if (error)
|
||||
xfs_fs_cmn_err(CE_WARN, mp,
|
||||
"xfs_inode_item_pushbuf: pushbuf error %d on iip %p, bp %p",
|
||||
error, iip, bp);
|
||||
} else {
|
||||
xfs_buf_relse(bp);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue