aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/xfs/linux-2.6/xfs_buf.c27
-rw-r--r--fs/xfs/linux-2.6/xfs_buf.h19
-rw-r--r--fs/xfs/xfs_rw.c31
-rw-r--r--fs/xfs/xfs_rw.h1
4 files changed, 28 insertions, 50 deletions
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c
index 18ae3ba8f78a..492465c6e0b4 100644
--- a/fs/xfs/linux-2.6/xfs_buf.c
+++ b/fs/xfs/linux-2.6/xfs_buf.c
@@ -1051,6 +1051,33 @@ xfs_buf_ioerror(
1051} 1051}
1052 1052
1053int 1053int
1054xfs_bwrite(
1055 struct xfs_mount *mp,
1056 struct xfs_buf *bp)
1057{
1058 int iowait = (bp->b_flags & XBF_ASYNC) == 0;
1059 int error = 0;
1060
1061 bp->b_strat = xfs_bdstrat_cb;
1062 bp->b_mount = mp;
1063 bp->b_flags |= XBF_WRITE;
1064 if (!iowait)
1065 bp->b_flags |= _XBF_RUN_QUEUES;
1066
1067 xfs_buf_delwri_dequeue(bp);
1068 xfs_buf_iostrategy(bp);
1069
1070 if (iowait) {
1071 error = xfs_buf_iowait(bp);
1072 if (error)
1073 xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR);
1074 xfs_buf_relse(bp);
1075 }
1076
1077 return error;
1078}
1079
1080int
1054xfs_bawrite( 1081xfs_bawrite(
1055 void *mp, 1082 void *mp,
1056 struct xfs_buf *bp) 1083 struct xfs_buf *bp)
diff --git a/fs/xfs/linux-2.6/xfs_buf.h b/fs/xfs/linux-2.6/xfs_buf.h
index c20a76001867..f69b8e714a11 100644
--- a/fs/xfs/linux-2.6/xfs_buf.h
+++ b/fs/xfs/linux-2.6/xfs_buf.h
@@ -232,6 +232,7 @@ extern void xfs_buf_lock(xfs_buf_t *);
232extern void xfs_buf_unlock(xfs_buf_t *); 232extern void xfs_buf_unlock(xfs_buf_t *);
233 233
234/* Buffer Read and Write Routines */ 234/* Buffer Read and Write Routines */
235extern int xfs_bwrite(struct xfs_mount *mp, struct xfs_buf *bp);
235extern int xfs_bawrite(void *mp, xfs_buf_t *bp); 236extern int xfs_bawrite(void *mp, xfs_buf_t *bp);
236extern void xfs_bdwrite(void *mp, xfs_buf_t *bp); 237extern void xfs_bdwrite(void *mp, xfs_buf_t *bp);
237extern void xfs_buf_ioend(xfs_buf_t *, int); 238extern void xfs_buf_ioend(xfs_buf_t *, int);
@@ -390,24 +391,6 @@ static inline void xfs_buf_relse(xfs_buf_t *bp)
390#define xfs_biozero(bp, off, len) \ 391#define xfs_biozero(bp, off, len) \
391 xfs_buf_iomove((bp), (off), (len), NULL, XBRW_ZERO) 392 xfs_buf_iomove((bp), (off), (len), NULL, XBRW_ZERO)
392 393
393
394static inline int XFS_bwrite(xfs_buf_t *bp)
395{
396 int iowait = (bp->b_flags & XBF_ASYNC) == 0;
397 int error = 0;
398
399 if (!iowait)
400 bp->b_flags |= _XBF_RUN_QUEUES;
401
402 xfs_buf_delwri_dequeue(bp);
403 xfs_buf_iostrategy(bp);
404 if (iowait) {
405 error = xfs_buf_iowait(bp);
406 xfs_buf_relse(bp);
407 }
408 return error;
409}
410
411#define xfs_iowait(bp) xfs_buf_iowait(bp) 394#define xfs_iowait(bp) xfs_buf_iowait(bp)
412 395
413#define xfs_baread(target, rablkno, ralen) \ 396#define xfs_baread(target, rablkno, ralen) \
diff --git a/fs/xfs/xfs_rw.c b/fs/xfs/xfs_rw.c
index 5aa07caea5f1..9d933a10d6bb 100644
--- a/fs/xfs/xfs_rw.c
+++ b/fs/xfs/xfs_rw.c
@@ -306,37 +306,6 @@ xfs_read_buf(
306} 306}
307 307
308/* 308/*
309 * Wrapper around bwrite() so that we can trap
310 * write errors, and act accordingly.
311 */
312int
313xfs_bwrite(
314 struct xfs_mount *mp,
315 struct xfs_buf *bp)
316{
317 int error;
318
319 /*
320 * XXXsup how does this work for quotas.
321 */
322 XFS_BUF_SET_BDSTRAT_FUNC(bp, xfs_bdstrat_cb);
323 bp->b_mount = mp;
324 XFS_BUF_WRITE(bp);
325
326 if ((error = XFS_bwrite(bp))) {
327 ASSERT(mp);
328 /*
329 * Cannot put a buftrace here since if the buffer is not
330 * B_HOLD then we will brelse() the buffer before returning
331 * from bwrite and we could be tracing a buffer that has
332 * been reused.
333 */
334 xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR);
335 }
336 return (error);
337}
338
339/*
340 * helper function to extract extent size hint from inode 309 * helper function to extract extent size hint from inode
341 */ 310 */
342xfs_extlen_t 311xfs_extlen_t
diff --git a/fs/xfs/xfs_rw.h b/fs/xfs/xfs_rw.h
index 571f2174435c..ff68eb5e738e 100644
--- a/fs/xfs/xfs_rw.h
+++ b/fs/xfs/xfs_rw.h
@@ -40,7 +40,6 @@ xfs_fsb_to_db(struct xfs_inode *ip, xfs_fsblock_t fsb)
40 * Prototypes for functions in xfs_rw.c. 40 * Prototypes for functions in xfs_rw.c.
41 */ 41 */
42extern int xfs_write_clear_setuid(struct xfs_inode *ip); 42extern int xfs_write_clear_setuid(struct xfs_inode *ip);
43extern int xfs_bwrite(struct xfs_mount *mp, struct xfs_buf *bp);
44extern int xfs_bioerror(struct xfs_buf *bp); 43extern int xfs_bioerror(struct xfs_buf *bp);
45extern int xfs_bioerror_relse(struct xfs_buf *bp); 44extern int xfs_bioerror_relse(struct xfs_buf *bp);
46extern int xfs_read_buf(struct xfs_mount *mp, xfs_buftarg_t *btp, 45extern int xfs_read_buf(struct xfs_mount *mp, xfs_buftarg_t *btp,