aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2008-12-09 04:47:30 -0500
committerLachlan McIlroy <lachlan@redback.melbourne.sgi.com>2008-12-10 21:13:33 -0500
commit15ac08a8b2c129abccf1be47b6ab09491e013db2 (patch)
tree9b9b630fbd168d1683369c7a72e83daf3216301c
parente055f13a6d8448d4f23121b7b11340c3fb55cce6 (diff)
[XFS] replace b_fspriv with b_mount
Replace the b_fspriv pointer and it's ugly accessors with a properly types xfs_mount pointer. Also switch log reocvery over to it instead of using b_fspriv for the mount pointer. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
-rw-r--r--fs/xfs/linux-2.6/xfs_buf.c4
-rw-r--r--fs/xfs/linux-2.6/xfs_buf.h4
-rw-r--r--fs/xfs/linux-2.6/xfs_lrw.c11
-rw-r--r--fs/xfs/xfs_buf_item.c4
-rw-r--r--fs/xfs/xfs_log_recover.c26
-rw-r--r--fs/xfs/xfs_rw.c2
6 files changed, 19 insertions, 32 deletions
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c
index cd89c56715a5..b9c304a629ee 100644
--- a/fs/xfs/linux-2.6/xfs_buf.c
+++ b/fs/xfs/linux-2.6/xfs_buf.c
@@ -1085,7 +1085,7 @@ xfs_bawrite(
1085 bp->b_flags &= ~(XBF_READ | XBF_DELWRI | XBF_READ_AHEAD); 1085 bp->b_flags &= ~(XBF_READ | XBF_DELWRI | XBF_READ_AHEAD);
1086 bp->b_flags |= (XBF_WRITE | XBF_ASYNC | _XBF_RUN_QUEUES); 1086 bp->b_flags |= (XBF_WRITE | XBF_ASYNC | _XBF_RUN_QUEUES);
1087 1087
1088 bp->b_fspriv3 = mp; 1088 bp->b_mount = mp;
1089 bp->b_strat = xfs_bdstrat_cb; 1089 bp->b_strat = xfs_bdstrat_cb;
1090 return xfs_bdstrat_cb(bp); 1090 return xfs_bdstrat_cb(bp);
1091} 1091}
@@ -1098,7 +1098,7 @@ xfs_bdwrite(
1098 XB_TRACE(bp, "bdwrite", 0); 1098 XB_TRACE(bp, "bdwrite", 0);
1099 1099
1100 bp->b_strat = xfs_bdstrat_cb; 1100 bp->b_strat = xfs_bdstrat_cb;
1101 bp->b_fspriv3 = mp; 1101 bp->b_mount = mp;
1102 1102
1103 bp->b_flags &= ~XBF_READ; 1103 bp->b_flags &= ~XBF_READ;
1104 bp->b_flags |= (XBF_DELWRI | XBF_ASYNC); 1104 bp->b_flags |= (XBF_DELWRI | XBF_ASYNC);
diff --git a/fs/xfs/linux-2.6/xfs_buf.h b/fs/xfs/linux-2.6/xfs_buf.h
index 0e2aa16f5e41..af8764e02d78 100644
--- a/fs/xfs/linux-2.6/xfs_buf.h
+++ b/fs/xfs/linux-2.6/xfs_buf.h
@@ -168,7 +168,7 @@ typedef struct xfs_buf {
168 struct completion b_iowait; /* queue for I/O waiters */ 168 struct completion b_iowait; /* queue for I/O waiters */
169 void *b_fspriv; 169 void *b_fspriv;
170 void *b_fspriv2; 170 void *b_fspriv2;
171 void *b_fspriv3; 171 struct xfs_mount *b_mount;
172 unsigned short b_error; /* error code on I/O */ 172 unsigned short b_error; /* error code on I/O */
173 unsigned int b_page_count; /* size of page array */ 173 unsigned int b_page_count; /* size of page array */
174 unsigned int b_offset; /* page offset in first page */ 174 unsigned int b_offset; /* page offset in first page */
@@ -335,8 +335,6 @@ extern void xfs_buf_trace(xfs_buf_t *, char *, void *, void *);
335#define XFS_BUF_SET_FSPRIVATE(bp, val) ((bp)->b_fspriv = (void*)(val)) 335#define XFS_BUF_SET_FSPRIVATE(bp, val) ((bp)->b_fspriv = (void*)(val))
336#define XFS_BUF_FSPRIVATE2(bp, type) ((type)(bp)->b_fspriv2) 336#define XFS_BUF_FSPRIVATE2(bp, type) ((type)(bp)->b_fspriv2)
337#define XFS_BUF_SET_FSPRIVATE2(bp, val) ((bp)->b_fspriv2 = (void*)(val)) 337#define XFS_BUF_SET_FSPRIVATE2(bp, val) ((bp)->b_fspriv2 = (void*)(val))
338#define XFS_BUF_FSPRIVATE3(bp, type) ((type)(bp)->b_fspriv3)
339#define XFS_BUF_SET_FSPRIVATE3(bp, val) ((bp)->b_fspriv3 = (void*)(val))
340#define XFS_BUF_SET_START(bp) do { } while (0) 338#define XFS_BUF_SET_START(bp) do { } while (0)
341#define XFS_BUF_SET_BRELSE_FUNC(bp, func) ((bp)->b_relse = (func)) 339#define XFS_BUF_SET_BRELSE_FUNC(bp, func) ((bp)->b_relse = (func))
342 340
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c
index 59b7d5f9e64a..92ce34b3787a 100644
--- a/fs/xfs/linux-2.6/xfs_lrw.c
+++ b/fs/xfs/linux-2.6/xfs_lrw.c
@@ -847,13 +847,7 @@ retry:
847int 847int
848xfs_bdstrat_cb(struct xfs_buf *bp) 848xfs_bdstrat_cb(struct xfs_buf *bp)
849{ 849{
850 xfs_mount_t *mp; 850 if (XFS_FORCED_SHUTDOWN(bp->b_mount)) {
851
852 mp = XFS_BUF_FSPRIVATE3(bp, xfs_mount_t *);
853 if (!XFS_FORCED_SHUTDOWN(mp)) {
854 xfs_buf_iorequest(bp);
855 return 0;
856 } else {
857 xfs_buftrace("XFS__BDSTRAT IOERROR", bp); 851 xfs_buftrace("XFS__BDSTRAT IOERROR", bp);
858 /* 852 /*
859 * Metadata write that didn't get logged but 853 * Metadata write that didn't get logged but
@@ -866,6 +860,9 @@ xfs_bdstrat_cb(struct xfs_buf *bp)
866 else 860 else
867 return (xfs_bioerror(bp)); 861 return (xfs_bioerror(bp));
868 } 862 }
863
864 xfs_buf_iorequest(bp);
865 return 0;
869} 866}
870 867
871/* 868/*
diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
index d245d04e10ca..d74ce1134262 100644
--- a/fs/xfs/xfs_buf_item.c
+++ b/fs/xfs/xfs_buf_item.c
@@ -707,8 +707,8 @@ xfs_buf_item_init(
707 * the first. If we do already have one, there is 707 * the first. If we do already have one, there is
708 * nothing to do here so return. 708 * nothing to do here so return.
709 */ 709 */
710 if (XFS_BUF_FSPRIVATE3(bp, xfs_mount_t *) != mp) 710 if (bp->b_mount != mp)
711 XFS_BUF_SET_FSPRIVATE3(bp, mp); 711 bp->b_mount = mp;
712 XFS_BUF_SET_BDSTRAT_FUNC(bp, xfs_bdstrat_cb); 712 XFS_BUF_SET_BDSTRAT_FUNC(bp, xfs_bdstrat_cb);
713 if (XFS_BUF_FSPRIVATE(bp, void *) != NULL) { 713 if (XFS_BUF_FSPRIVATE(bp, void *) != NULL) {
714 lip = XFS_BUF_FSPRIVATE(bp, xfs_log_item_t *); 714 lip = XFS_BUF_FSPRIVATE(bp, xfs_log_item_t *);
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index 51412cced010..35cca98bd94c 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -267,21 +267,16 @@ STATIC void
267xlog_recover_iodone( 267xlog_recover_iodone(
268 struct xfs_buf *bp) 268 struct xfs_buf *bp)
269{ 269{
270 xfs_mount_t *mp;
271
272 ASSERT(XFS_BUF_FSPRIVATE(bp, void *));
273
274 if (XFS_BUF_GETERROR(bp)) { 270 if (XFS_BUF_GETERROR(bp)) {
275 /* 271 /*
276 * We're not going to bother about retrying 272 * We're not going to bother about retrying
277 * this during recovery. One strike! 273 * this during recovery. One strike!
278 */ 274 */
279 mp = XFS_BUF_FSPRIVATE(bp, xfs_mount_t *);
280 xfs_ioerror_alert("xlog_recover_iodone", 275 xfs_ioerror_alert("xlog_recover_iodone",
281 mp, bp, XFS_BUF_ADDR(bp)); 276 bp->b_mount, bp, XFS_BUF_ADDR(bp));
282 xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR); 277 xfs_force_shutdown(bp->b_mount, SHUTDOWN_META_IO_ERROR);
283 } 278 }
284 XFS_BUF_SET_FSPRIVATE(bp, NULL); 279 bp->b_mount = NULL;
285 XFS_BUF_CLR_IODONE_FUNC(bp); 280 XFS_BUF_CLR_IODONE_FUNC(bp);
286 xfs_biodone(bp); 281 xfs_biodone(bp);
287} 282}
@@ -2225,9 +2220,8 @@ xlog_recover_do_buffer_trans(
2225 XFS_BUF_STALE(bp); 2220 XFS_BUF_STALE(bp);
2226 error = xfs_bwrite(mp, bp); 2221 error = xfs_bwrite(mp, bp);
2227 } else { 2222 } else {
2228 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) == NULL || 2223 ASSERT(bp->b_mount == NULL || bp->b_mount == mp);
2229 XFS_BUF_FSPRIVATE(bp, xfs_mount_t *) == mp); 2224 bp->b_mount = mp;
2230 XFS_BUF_SET_FSPRIVATE(bp, mp);
2231 XFS_BUF_SET_IODONE_FUNC(bp, xlog_recover_iodone); 2225 XFS_BUF_SET_IODONE_FUNC(bp, xlog_recover_iodone);
2232 xfs_bdwrite(mp, bp); 2226 xfs_bdwrite(mp, bp);
2233 } 2227 }
@@ -2490,9 +2484,8 @@ xlog_recover_do_inode_trans(
2490 2484
2491write_inode_buffer: 2485write_inode_buffer:
2492 if (ITEM_TYPE(item) == XFS_LI_INODE) { 2486 if (ITEM_TYPE(item) == XFS_LI_INODE) {
2493 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) == NULL || 2487 ASSERT(bp->b_mount == NULL || bp->b_mount == mp);
2494 XFS_BUF_FSPRIVATE(bp, xfs_mount_t *) == mp); 2488 bp->b_mount = mp;
2495 XFS_BUF_SET_FSPRIVATE(bp, mp);
2496 XFS_BUF_SET_IODONE_FUNC(bp, xlog_recover_iodone); 2489 XFS_BUF_SET_IODONE_FUNC(bp, xlog_recover_iodone);
2497 xfs_bdwrite(mp, bp); 2490 xfs_bdwrite(mp, bp);
2498 } else { 2491 } else {
@@ -2623,9 +2616,8 @@ xlog_recover_do_dquot_trans(
2623 memcpy(ddq, recddq, item->ri_buf[1].i_len); 2616 memcpy(ddq, recddq, item->ri_buf[1].i_len);
2624 2617
2625 ASSERT(dq_f->qlf_size == 2); 2618 ASSERT(dq_f->qlf_size == 2);
2626 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) == NULL || 2619 ASSERT(bp->b_mount == NULL || bp->b_mount == mp);
2627 XFS_BUF_FSPRIVATE(bp, xfs_mount_t *) == mp); 2620 bp->b_mount = mp;
2628 XFS_BUF_SET_FSPRIVATE(bp, mp);
2629 XFS_BUF_SET_IODONE_FUNC(bp, xlog_recover_iodone); 2621 XFS_BUF_SET_IODONE_FUNC(bp, xlog_recover_iodone);
2630 xfs_bdwrite(mp, bp); 2622 xfs_bdwrite(mp, bp);
2631 2623
diff --git a/fs/xfs/xfs_rw.c b/fs/xfs/xfs_rw.c
index 3a82576dde9a..36f3a21c54d2 100644
--- a/fs/xfs/xfs_rw.c
+++ b/fs/xfs/xfs_rw.c
@@ -406,7 +406,7 @@ xfs_bwrite(
406 * XXXsup how does this work for quotas. 406 * XXXsup how does this work for quotas.
407 */ 407 */
408 XFS_BUF_SET_BDSTRAT_FUNC(bp, xfs_bdstrat_cb); 408 XFS_BUF_SET_BDSTRAT_FUNC(bp, xfs_bdstrat_cb);
409 XFS_BUF_SET_FSPRIVATE3(bp, mp); 409 bp->b_mount = mp;
410 XFS_BUF_WRITE(bp); 410 XFS_BUF_WRITE(bp);
411 411
412 if ((error = XFS_bwrite(bp))) { 412 if ((error = XFS_bwrite(bp))) {