diff options
Diffstat (limited to 'fs/xfs/xfs_bmap_util.c')
| -rw-r--r-- | fs/xfs/xfs_bmap_util.c | 15 | 
1 files changed, 13 insertions, 2 deletions
diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 5887e41c0323..82e0dab46ee5 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -287,6 +287,7 @@ xfs_bmapi_allocate(  	INIT_WORK_ONSTACK(&args->work, xfs_bmapi_allocate_worker);  	queue_work(xfs_alloc_wq, &args->work);  	wait_for_completion(&done); +	destroy_work_on_stack(&args->work);  	return args->result;  } @@ -1187,7 +1188,12 @@ xfs_zero_remaining_bytes(  		XFS_BUF_UNWRITE(bp);  		XFS_BUF_READ(bp);  		XFS_BUF_SET_ADDR(bp, xfs_fsb_to_db(ip, imap.br_startblock)); -		xfsbdstrat(mp, bp); + +		if (XFS_FORCED_SHUTDOWN(mp)) { +			error = XFS_ERROR(EIO); +			break; +		} +		xfs_buf_iorequest(bp);  		error = xfs_buf_iowait(bp);  		if (error) {  			xfs_buf_ioerror_alert(bp, @@ -1200,7 +1206,12 @@ xfs_zero_remaining_bytes(  		XFS_BUF_UNDONE(bp);  		XFS_BUF_UNREAD(bp);  		XFS_BUF_WRITE(bp); -		xfsbdstrat(mp, bp); + +		if (XFS_FORCED_SHUTDOWN(mp)) { +			error = XFS_ERROR(EIO); +			break; +		} +		xfs_buf_iorequest(bp);  		error = xfs_buf_iowait(bp);  		if (error) {  			xfs_buf_ioerror_alert(bp,  | 
