aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/xfs/linux-2.6/xfs_aops.c4
-rw-r--r--fs/xfs/linux-2.6/xfs_lrw.c56
-rw-r--r--fs/xfs/linux-2.6/xfs_lrw.h3
-rw-r--r--fs/xfs/xfs_dfrag.c2
-rw-r--r--fs/xfs/xfs_inode.c8
-rw-r--r--fs/xfs/xfs_iocore.c40
-rw-r--r--fs/xfs/xfs_iomap.c94
-rw-r--r--fs/xfs/xfs_iomap.h3
-rw-r--r--fs/xfs/xfs_mount.c1
-rw-r--r--fs/xfs/xfs_mount.h101
-rw-r--r--fs/xfs/xfs_vfsops.c4
-rw-r--r--fs/xfs/xfs_vnodeops.c12
12 files changed, 79 insertions, 249 deletions
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c
index d23c561a6293..d20df3918650 100644
--- a/fs/xfs/linux-2.6/xfs_aops.c
+++ b/fs/xfs/linux-2.6/xfs_aops.c
@@ -317,7 +317,7 @@ xfs_map_blocks(
317 xfs_inode_t *ip = XFS_I(inode); 317 xfs_inode_t *ip = XFS_I(inode);
318 int error, nmaps = 1; 318 int error, nmaps = 1;
319 319
320 error = xfs_bmap(ip, offset, count, 320 error = xfs_iomap(ip, offset, count,
321 flags, mapp, &nmaps); 321 flags, mapp, &nmaps);
322 if (!error && (flags & (BMAPI_WRITE|BMAPI_ALLOCATE))) 322 if (!error && (flags & (BMAPI_WRITE|BMAPI_ALLOCATE)))
323 xfs_iflags_set(ip, XFS_IMODIFIED); 323 xfs_iflags_set(ip, XFS_IMODIFIED);
@@ -1336,7 +1336,7 @@ __xfs_get_blocks(
1336 offset = (xfs_off_t)iblock << inode->i_blkbits; 1336 offset = (xfs_off_t)iblock << inode->i_blkbits;
1337 ASSERT(bh_result->b_size >= (1 << inode->i_blkbits)); 1337 ASSERT(bh_result->b_size >= (1 << inode->i_blkbits));
1338 size = bh_result->b_size; 1338 size = bh_result->b_size;
1339 error = xfs_bmap(XFS_I(inode), offset, size, 1339 error = xfs_iomap(XFS_I(inode), offset, size,
1340 create ? flags : BMAPI_READ, &iomap, &niomap); 1340 create ? flags : BMAPI_READ, &iomap, &niomap);
1341 if (error) 1341 if (error)
1342 return -error; 1342 return -error;
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c
index d6a8dddb2268..0abc7d0586c9 100644
--- a/fs/xfs/linux-2.6/xfs_lrw.c
+++ b/fs/xfs/linux-2.6/xfs_lrw.c
@@ -131,7 +131,7 @@ xfs_inval_cached_trace(
131 */ 131 */
132STATIC int 132STATIC int
133xfs_iozero( 133xfs_iozero(
134 struct inode *ip, /* inode */ 134 struct xfs_inode *ip, /* inode */
135 loff_t pos, /* offset in file */ 135 loff_t pos, /* offset in file */
136 size_t count) /* size of data to zero */ 136 size_t count) /* size of data to zero */
137{ 137{
@@ -139,7 +139,7 @@ xfs_iozero(
139 struct address_space *mapping; 139 struct address_space *mapping;
140 int status; 140 int status;
141 141
142 mapping = ip->i_mapping; 142 mapping = ip->i_vnode->i_mapping;
143 do { 143 do {
144 unsigned offset, bytes; 144 unsigned offset, bytes;
145 void *fsdata; 145 void *fsdata;
@@ -389,20 +389,19 @@ xfs_splice_write(
389 */ 389 */
390STATIC int /* error (positive) */ 390STATIC int /* error (positive) */
391xfs_zero_last_block( 391xfs_zero_last_block(
392 struct inode *ip, 392 xfs_inode_t *ip,
393 xfs_iocore_t *io,
394 xfs_fsize_t offset, 393 xfs_fsize_t offset,
395 xfs_fsize_t isize) 394 xfs_fsize_t isize)
396{ 395{
397 xfs_fileoff_t last_fsb; 396 xfs_fileoff_t last_fsb;
398 xfs_mount_t *mp = io->io_mount; 397 xfs_mount_t *mp = ip->i_mount;
399 int nimaps; 398 int nimaps;
400 int zero_offset; 399 int zero_offset;
401 int zero_len; 400 int zero_len;
402 int error = 0; 401 int error = 0;
403 xfs_bmbt_irec_t imap; 402 xfs_bmbt_irec_t imap;
404 403
405 ASSERT(ismrlocked(io->io_lock, MR_UPDATE) != 0); 404 ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE) != 0);
406 405
407 zero_offset = XFS_B_FSB_OFFSET(mp, isize); 406 zero_offset = XFS_B_FSB_OFFSET(mp, isize);
408 if (zero_offset == 0) { 407 if (zero_offset == 0) {
@@ -415,7 +414,7 @@ xfs_zero_last_block(
415 414
416 last_fsb = XFS_B_TO_FSBT(mp, isize); 415 last_fsb = XFS_B_TO_FSBT(mp, isize);
417 nimaps = 1; 416 nimaps = 1;
418 error = XFS_BMAPI(mp, NULL, io, last_fsb, 1, 0, NULL, 0, &imap, 417 error = xfs_bmapi(NULL, ip, last_fsb, 1, 0, NULL, 0, &imap,
419 &nimaps, NULL, NULL); 418 &nimaps, NULL, NULL);
420 if (error) { 419 if (error) {
421 return error; 420 return error;
@@ -433,14 +432,14 @@ xfs_zero_last_block(
433 * out sync. We need to drop the ilock while we do this so we 432 * out sync. We need to drop the ilock while we do this so we
434 * don't deadlock when the buffer cache calls back to us. 433 * don't deadlock when the buffer cache calls back to us.
435 */ 434 */
436 XFS_IUNLOCK(mp, io, XFS_ILOCK_EXCL| XFS_EXTSIZE_RD); 435 xfs_iunlock(ip, XFS_ILOCK_EXCL| XFS_EXTSIZE_RD);
437 436
438 zero_len = mp->m_sb.sb_blocksize - zero_offset; 437 zero_len = mp->m_sb.sb_blocksize - zero_offset;
439 if (isize + zero_len > offset) 438 if (isize + zero_len > offset)
440 zero_len = offset - isize; 439 zero_len = offset - isize;
441 error = xfs_iozero(ip, isize, zero_len); 440 error = xfs_iozero(ip, isize, zero_len);
442 441
443 XFS_ILOCK(mp, io, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD); 442 xfs_ilock(ip, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD);
444 ASSERT(error >= 0); 443 ASSERT(error >= 0);
445 return error; 444 return error;
446} 445}
@@ -458,12 +457,11 @@ xfs_zero_last_block(
458 457
459int /* error (positive) */ 458int /* error (positive) */
460xfs_zero_eof( 459xfs_zero_eof(
461 bhv_vnode_t *vp, 460 xfs_inode_t *ip,
462 xfs_iocore_t *io,
463 xfs_off_t offset, /* starting I/O offset */ 461 xfs_off_t offset, /* starting I/O offset */
464 xfs_fsize_t isize) /* current inode size */ 462 xfs_fsize_t isize) /* current inode size */
465{ 463{
466 struct inode *ip = vn_to_inode(vp); 464 xfs_iocore_t *io = &ip->i_iocore;
467 xfs_fileoff_t start_zero_fsb; 465 xfs_fileoff_t start_zero_fsb;
468 xfs_fileoff_t end_zero_fsb; 466 xfs_fileoff_t end_zero_fsb;
469 xfs_fileoff_t zero_count_fsb; 467 xfs_fileoff_t zero_count_fsb;
@@ -483,7 +481,7 @@ xfs_zero_eof(
483 * First handle zeroing the block on which isize resides. 481 * First handle zeroing the block on which isize resides.
484 * We only zero a part of that block so it is handled specially. 482 * We only zero a part of that block so it is handled specially.
485 */ 483 */
486 error = xfs_zero_last_block(ip, io, offset, isize); 484 error = xfs_zero_last_block(ip, offset, isize);
487 if (error) { 485 if (error) {
488 ASSERT(ismrlocked(io->io_lock, MR_UPDATE)); 486 ASSERT(ismrlocked(io->io_lock, MR_UPDATE));
489 ASSERT(ismrlocked(io->io_iolock, MR_UPDATE)); 487 ASSERT(ismrlocked(io->io_iolock, MR_UPDATE));
@@ -514,7 +512,7 @@ xfs_zero_eof(
514 while (start_zero_fsb <= end_zero_fsb) { 512 while (start_zero_fsb <= end_zero_fsb) {
515 nimaps = 1; 513 nimaps = 1;
516 zero_count_fsb = end_zero_fsb - start_zero_fsb + 1; 514 zero_count_fsb = end_zero_fsb - start_zero_fsb + 1;
517 error = XFS_BMAPI(mp, NULL, io, start_zero_fsb, zero_count_fsb, 515 error = xfs_bmapi(NULL, ip, start_zero_fsb, zero_count_fsb,
518 0, NULL, 0, &imap, &nimaps, NULL, NULL); 516 0, NULL, 0, &imap, &nimaps, NULL, NULL);
519 if (error) { 517 if (error) {
520 ASSERT(ismrlocked(io->io_lock, MR_UPDATE)); 518 ASSERT(ismrlocked(io->io_lock, MR_UPDATE));
@@ -542,7 +540,7 @@ xfs_zero_eof(
542 * Drop the inode lock while we're doing the I/O. 540 * Drop the inode lock while we're doing the I/O.
543 * We'll still have the iolock to protect us. 541 * We'll still have the iolock to protect us.
544 */ 542 */
545 XFS_IUNLOCK(mp, io, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD); 543 xfs_iunlock(ip, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD);
546 544
547 zero_off = XFS_FSB_TO_B(mp, start_zero_fsb); 545 zero_off = XFS_FSB_TO_B(mp, start_zero_fsb);
548 zero_len = XFS_FSB_TO_B(mp, imap.br_blockcount); 546 zero_len = XFS_FSB_TO_B(mp, imap.br_blockcount);
@@ -558,14 +556,13 @@ xfs_zero_eof(
558 start_zero_fsb = imap.br_startoff + imap.br_blockcount; 556 start_zero_fsb = imap.br_startoff + imap.br_blockcount;
559 ASSERT(start_zero_fsb <= (end_zero_fsb + 1)); 557 ASSERT(start_zero_fsb <= (end_zero_fsb + 1));
560 558
561 XFS_ILOCK(mp, io, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD); 559 xfs_ilock(ip, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD);
562 } 560 }
563 561
564 return 0; 562 return 0;
565 563
566out_lock: 564out_lock:
567 565 xfs_ilock(ip, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD);
568 XFS_ILOCK(mp, io, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD);
569 ASSERT(error >= 0); 566 ASSERT(error >= 0);
570 return error; 567 return error;
571} 568}
@@ -706,7 +703,7 @@ start:
706 */ 703 */
707 704
708 if (pos > xip->i_size) { 705 if (pos > xip->i_size) {
709 error = xfs_zero_eof(vp, io, pos, xip->i_size); 706 error = xfs_zero_eof(xip, pos, xip->i_size);
710 if (error) { 707 if (error) {
711 xfs_iunlock(xip, XFS_ILOCK_EXCL); 708 xfs_iunlock(xip, XFS_ILOCK_EXCL);
712 goto out_unlock_internal; 709 goto out_unlock_internal;
@@ -751,7 +748,7 @@ retry:
751 748
752 if (need_i_mutex) { 749 if (need_i_mutex) {
753 /* demote the lock now the cached pages are gone */ 750 /* demote the lock now the cached pages are gone */
754 XFS_ILOCK_DEMOTE(mp, io, XFS_IOLOCK_EXCL); 751 xfs_ilock_demote(xip, XFS_IOLOCK_EXCL);
755 mutex_unlock(&inode->i_mutex); 752 mutex_unlock(&inode->i_mutex);
756 753
757 iolock = XFS_IOLOCK_SHARED; 754 iolock = XFS_IOLOCK_SHARED;
@@ -894,25 +891,6 @@ xfs_bdstrat_cb(struct xfs_buf *bp)
894 } 891 }
895} 892}
896 893
897
898int
899xfs_bmap(
900 xfs_inode_t *ip,
901 xfs_off_t offset,
902 ssize_t count,
903 int flags,
904 xfs_iomap_t *iomapp,
905 int *niomaps)
906{
907 xfs_iocore_t *io = &ip->i_iocore;
908
909 ASSERT((ip->i_d.di_mode & S_IFMT) == S_IFREG);
910 ASSERT(((ip->i_d.di_flags & XFS_DIFLAG_REALTIME) != 0) ==
911 ((ip->i_iocore.io_flags & XFS_IOCORE_RT) != 0));
912
913 return xfs_iomap(io, offset, count, flags, iomapp, niomaps);
914}
915
916/* 894/*
917 * Wrapper around bdstrat so that we can stop data 895 * Wrapper around bdstrat so that we can stop data
918 * from going to disk in case we are shutting down the filesystem. 896 * from going to disk in case we are shutting down the filesystem.
diff --git a/fs/xfs/linux-2.6/xfs_lrw.h b/fs/xfs/linux-2.6/xfs_lrw.h
index 4b7747a828d9..a982fbc6a7cf 100644
--- a/fs/xfs/linux-2.6/xfs_lrw.h
+++ b/fs/xfs/linux-2.6/xfs_lrw.h
@@ -73,7 +73,6 @@ extern int xfsbdstrat(struct xfs_mount *, struct xfs_buf *);
73extern int xfs_bdstrat_cb(struct xfs_buf *); 73extern int xfs_bdstrat_cb(struct xfs_buf *);
74extern int xfs_dev_is_read_only(struct xfs_mount *, char *); 74extern int xfs_dev_is_read_only(struct xfs_mount *, char *);
75 75
76extern int xfs_zero_eof(struct inode *, struct xfs_iocore *, xfs_off_t, 76extern int xfs_zero_eof(struct xfs_inode *, xfs_off_t, xfs_fsize_t);
77 xfs_fsize_t);
78 77
79#endif /* __XFS_LRW_H__ */ 78#endif /* __XFS_LRW_H__ */
diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c
index 584f1ae85cd9..39c4480bbb9f 100644
--- a/fs/xfs/xfs_dfrag.c
+++ b/fs/xfs/xfs_dfrag.c
@@ -111,7 +111,7 @@ xfs_swapext(
111 goto error0; 111 goto error0;
112 } 112 }
113 113
114 error = XFS_SWAP_EXTENTS(mp, &ip->i_iocore, &tip->i_iocore, sxp); 114 error = xfs_swap_extents(ip, tip, sxp);
115 115
116 error0: 116 error0:
117 if (fp != NULL) 117 if (fp != NULL)
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index fc2055e64279..a6d35aee93b2 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -1711,7 +1711,7 @@ xfs_itruncate_finish(
1711 * runs. 1711 * runs.
1712 */ 1712 */
1713 XFS_BMAP_INIT(&free_list, &first_block); 1713 XFS_BMAP_INIT(&free_list, &first_block);
1714 error = XFS_BUNMAPI(mp, ntp, &ip->i_iocore, 1714 error = xfs_bunmapi(ntp, ip,
1715 first_unmap_block, unmap_len, 1715 first_unmap_block, unmap_len,
1716 XFS_BMAPI_AFLAG(fork) | 1716 XFS_BMAPI_AFLAG(fork) |
1717 (sync ? 0 : XFS_BMAPI_ASYNC), 1717 (sync ? 0 : XFS_BMAPI_ASYNC),
@@ -1844,8 +1844,6 @@ xfs_igrow_start(
1844 xfs_fsize_t new_size, 1844 xfs_fsize_t new_size,
1845 cred_t *credp) 1845 cred_t *credp)
1846{ 1846{
1847 int error;
1848
1849 ASSERT(ismrlocked(&(ip->i_lock), MR_UPDATE) != 0); 1847 ASSERT(ismrlocked(&(ip->i_lock), MR_UPDATE) != 0);
1850 ASSERT(ismrlocked(&(ip->i_iolock), MR_UPDATE) != 0); 1848 ASSERT(ismrlocked(&(ip->i_iolock), MR_UPDATE) != 0);
1851 ASSERT(new_size > ip->i_size); 1849 ASSERT(new_size > ip->i_size);
@@ -1855,9 +1853,7 @@ xfs_igrow_start(
1855 * xfs_write_file() beyond the end of the file 1853 * xfs_write_file() beyond the end of the file
1856 * and any blocks between the old and new file sizes. 1854 * and any blocks between the old and new file sizes.
1857 */ 1855 */
1858 error = xfs_zero_eof(XFS_ITOV(ip), &ip->i_iocore, new_size, 1856 return xfs_zero_eof(ip, new_size, ip->i_size);
1859 ip->i_size);
1860 return error;
1861} 1857}
1862 1858
1863/* 1859/*
diff --git a/fs/xfs/xfs_iocore.c b/fs/xfs/xfs_iocore.c
index b27b5d5be841..336e27b39e13 100644
--- a/fs/xfs/xfs_iocore.c
+++ b/fs/xfs/xfs_iocore.c
@@ -47,46 +47,6 @@
47#include "xfs_trans_space.h" 47#include "xfs_trans_space.h"
48#include "xfs_iomap.h" 48#include "xfs_iomap.h"
49 49
50
51STATIC xfs_fsize_t
52xfs_size_fn(
53 xfs_inode_t *ip)
54{
55 return XFS_ISIZE(ip);
56}
57
58STATIC int
59xfs_ioinit(
60 struct xfs_mount *mp,
61 struct xfs_mount_args *mntargs,
62 int flags)
63{
64 return xfs_mountfs(mp, flags);
65}
66
67xfs_ioops_t xfs_iocore_xfs = {
68 .xfs_ioinit = (xfs_ioinit_t) xfs_ioinit,
69 .xfs_bmapi_func = (xfs_bmapi_t) xfs_bmapi,
70 .xfs_bunmapi_func = (xfs_bunmapi_t) xfs_bunmapi,
71 .xfs_bmap_eof_func = (xfs_bmap_eof_t) xfs_bmap_eof,
72 .xfs_iomap_write_direct =
73 (xfs_iomap_write_direct_t) xfs_iomap_write_direct,
74 .xfs_iomap_write_delay =
75 (xfs_iomap_write_delay_t) xfs_iomap_write_delay,
76 .xfs_iomap_write_allocate =
77 (xfs_iomap_write_allocate_t) xfs_iomap_write_allocate,
78 .xfs_iomap_write_unwritten =
79 (xfs_iomap_write_unwritten_t) xfs_iomap_write_unwritten,
80 .xfs_ilock = (xfs_lock_t) xfs_ilock,
81 .xfs_lck_map_shared = (xfs_lck_map_shared_t) xfs_ilock_map_shared,
82 .xfs_ilock_demote = (xfs_lock_demote_t) xfs_ilock_demote,
83 .xfs_ilock_nowait = (xfs_lock_nowait_t) xfs_ilock_nowait,
84 .xfs_unlock = (xfs_unlk_t) xfs_iunlock,
85 .xfs_size_func = (xfs_size_t) xfs_size_fn,
86 .xfs_iodone = (xfs_iodone_t) fs_noerr,
87 .xfs_swap_extents_func = (xfs_swap_extents_t) xfs_swap_extents,
88};
89
90void 50void
91xfs_iocore_inode_reinit( 51xfs_iocore_inode_reinit(
92 xfs_inode_t *ip) 52 xfs_inode_t *ip)
diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
index 21ca62880514..4821b8563c41 100644
--- a/fs/xfs/xfs_iomap.c
+++ b/fs/xfs/xfs_iomap.c
@@ -53,11 +53,11 @@
53void 53void
54xfs_iomap_enter_trace( 54xfs_iomap_enter_trace(
55 int tag, 55 int tag,
56 xfs_iocore_t *io, 56 xfs_inode_t *ip,
57 xfs_off_t offset, 57 xfs_off_t offset,
58 ssize_t count) 58 ssize_t count)
59{ 59{
60 xfs_inode_t *ip = XFS_IO_INODE(io); 60 xfs_iocore_t *io = &ip->i_iocore;
61 61
62 if (!ip->i_rwtrace) 62 if (!ip->i_rwtrace)
63 return; 63 return;
@@ -84,15 +84,13 @@ xfs_iomap_enter_trace(
84void 84void
85xfs_iomap_map_trace( 85xfs_iomap_map_trace(
86 int tag, 86 int tag,
87 xfs_iocore_t *io, 87 xfs_inode_t *ip,
88 xfs_off_t offset, 88 xfs_off_t offset,
89 ssize_t count, 89 ssize_t count,
90 xfs_iomap_t *iomapp, 90 xfs_iomap_t *iomapp,
91 xfs_bmbt_irec_t *imapp, 91 xfs_bmbt_irec_t *imapp,
92 int flags) 92 int flags)
93{ 93{
94 xfs_inode_t *ip = XFS_IO_INODE(io);
95
96 if (!ip->i_rwtrace) 94 if (!ip->i_rwtrace)
97 return; 95 return;
98 96
@@ -126,7 +124,7 @@ xfs_iomap_map_trace(
126 124
127STATIC int 125STATIC int
128xfs_imap_to_bmap( 126xfs_imap_to_bmap(
129 xfs_iocore_t *io, 127 xfs_inode_t *ip,
130 xfs_off_t offset, 128 xfs_off_t offset,
131 xfs_bmbt_irec_t *imap, 129 xfs_bmbt_irec_t *imap,
132 xfs_iomap_t *iomapp, 130 xfs_iomap_t *iomapp,
@@ -134,11 +132,10 @@ xfs_imap_to_bmap(
134 int iomaps, /* Number of iomap entries */ 132 int iomaps, /* Number of iomap entries */
135 int flags) 133 int flags)
136{ 134{
137 xfs_mount_t *mp; 135 xfs_mount_t *mp = ip->i_mount;
138 int pbm; 136 int pbm;
139 xfs_fsblock_t start_block; 137 xfs_fsblock_t start_block;
140 138
141 mp = io->io_mount;
142 139
143 for (pbm = 0; imaps && pbm < iomaps; imaps--, iomapp++, imap++, pbm++) { 140 for (pbm = 0; imaps && pbm < iomaps; imaps--, iomapp++, imap++, pbm++) {
144 iomapp->iomap_offset = XFS_FSB_TO_B(mp, imap->br_startoff); 141 iomapp->iomap_offset = XFS_FSB_TO_B(mp, imap->br_startoff);
@@ -146,7 +143,7 @@ xfs_imap_to_bmap(
146 iomapp->iomap_bsize = XFS_FSB_TO_B(mp, imap->br_blockcount); 143 iomapp->iomap_bsize = XFS_FSB_TO_B(mp, imap->br_blockcount);
147 iomapp->iomap_flags = flags; 144 iomapp->iomap_flags = flags;
148 145
149 if (io->io_flags & XFS_IOCORE_RT) { 146 if (ip->i_d.di_flags & XFS_DIFLAG_REALTIME) {
150 iomapp->iomap_flags |= IOMAP_REALTIME; 147 iomapp->iomap_flags |= IOMAP_REALTIME;
151 iomapp->iomap_target = mp->m_rtdev_targp; 148 iomapp->iomap_target = mp->m_rtdev_targp;
152 } else { 149 } else {
@@ -160,7 +157,7 @@ xfs_imap_to_bmap(
160 iomapp->iomap_bn = IOMAP_DADDR_NULL; 157 iomapp->iomap_bn = IOMAP_DADDR_NULL;
161 iomapp->iomap_flags |= IOMAP_DELAY; 158 iomapp->iomap_flags |= IOMAP_DELAY;
162 } else { 159 } else {
163 iomapp->iomap_bn = XFS_FSB_TO_DB_IO(io, start_block); 160 iomapp->iomap_bn = XFS_FSB_TO_DB(ip, start_block);
164 if (ISUNWRITTEN(imap)) 161 if (ISUNWRITTEN(imap))
165 iomapp->iomap_flags |= IOMAP_UNWRITTEN; 162 iomapp->iomap_flags |= IOMAP_UNWRITTEN;
166 } 163 }
@@ -172,14 +169,14 @@ xfs_imap_to_bmap(
172 169
173int 170int
174xfs_iomap( 171xfs_iomap(
175 xfs_iocore_t *io, 172 xfs_inode_t *ip,
176 xfs_off_t offset, 173 xfs_off_t offset,
177 ssize_t count, 174 ssize_t count,
178 int flags, 175 int flags,
179 xfs_iomap_t *iomapp, 176 xfs_iomap_t *iomapp,
180 int *niomaps) 177 int *niomaps)
181{ 178{
182 xfs_mount_t *mp = io->io_mount; 179 xfs_mount_t *mp = ip->i_mount;
183 xfs_fileoff_t offset_fsb, end_fsb; 180 xfs_fileoff_t offset_fsb, end_fsb;
184 int error = 0; 181 int error = 0;
185 int lockmode = 0; 182 int lockmode = 0;
@@ -188,32 +185,37 @@ xfs_iomap(
188 int bmapi_flags = 0; 185 int bmapi_flags = 0;
189 int iomap_flags = 0; 186 int iomap_flags = 0;
190 187
188 ASSERT((ip->i_d.di_mode & S_IFMT) == S_IFREG);
189 ASSERT(((ip->i_d.di_flags & XFS_DIFLAG_REALTIME) != 0) ==
190 ((ip->i_iocore.io_flags & XFS_IOCORE_RT) != 0));
191
191 if (XFS_FORCED_SHUTDOWN(mp)) 192 if (XFS_FORCED_SHUTDOWN(mp))
192 return XFS_ERROR(EIO); 193 return XFS_ERROR(EIO);
193 194
194 switch (flags & (BMAPI_READ | BMAPI_WRITE | BMAPI_ALLOCATE)) { 195 switch (flags & (BMAPI_READ | BMAPI_WRITE | BMAPI_ALLOCATE)) {
195 case BMAPI_READ: 196 case BMAPI_READ:
196 xfs_iomap_enter_trace(XFS_IOMAP_READ_ENTER, io, offset, count); 197 xfs_iomap_enter_trace(XFS_IOMAP_READ_ENTER, ip, offset, count);
197 lockmode = XFS_LCK_MAP_SHARED(mp, io); 198 lockmode = xfs_ilock_map_shared(ip);
198 bmapi_flags = XFS_BMAPI_ENTIRE; 199 bmapi_flags = XFS_BMAPI_ENTIRE;
199 break; 200 break;
200 case BMAPI_WRITE: 201 case BMAPI_WRITE:
201 xfs_iomap_enter_trace(XFS_IOMAP_WRITE_ENTER, io, offset, count); 202 xfs_iomap_enter_trace(XFS_IOMAP_WRITE_ENTER, ip, offset, count);
202 lockmode = XFS_ILOCK_EXCL|XFS_EXTSIZE_WR; 203 lockmode = XFS_ILOCK_EXCL|XFS_EXTSIZE_WR;
203 if (flags & BMAPI_IGNSTATE) 204 if (flags & BMAPI_IGNSTATE)
204 bmapi_flags |= XFS_BMAPI_IGSTATE|XFS_BMAPI_ENTIRE; 205 bmapi_flags |= XFS_BMAPI_IGSTATE|XFS_BMAPI_ENTIRE;
205 XFS_ILOCK(mp, io, lockmode); 206 xfs_ilock(ip, lockmode);
206 break; 207 break;
207 case BMAPI_ALLOCATE: 208 case BMAPI_ALLOCATE:
208 xfs_iomap_enter_trace(XFS_IOMAP_ALLOC_ENTER, io, offset, count); 209 xfs_iomap_enter_trace(XFS_IOMAP_ALLOC_ENTER, ip, offset, count);
209 lockmode = XFS_ILOCK_SHARED|XFS_EXTSIZE_RD; 210 lockmode = XFS_ILOCK_SHARED|XFS_EXTSIZE_RD;
210 bmapi_flags = XFS_BMAPI_ENTIRE; 211 bmapi_flags = XFS_BMAPI_ENTIRE;
212
211 /* Attempt non-blocking lock */ 213 /* Attempt non-blocking lock */
212 if (flags & BMAPI_TRYLOCK) { 214 if (flags & BMAPI_TRYLOCK) {
213 if (!XFS_ILOCK_NOWAIT(mp, io, lockmode)) 215 if (!xfs_ilock_nowait(ip, lockmode))
214 return XFS_ERROR(EAGAIN); 216 return XFS_ERROR(EAGAIN);
215 } else { 217 } else {
216 XFS_ILOCK(mp, io, lockmode); 218 xfs_ilock(ip, lockmode);
217 } 219 }
218 break; 220 break;
219 default: 221 default:
@@ -226,7 +228,7 @@ xfs_iomap(
226 end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)offset + count); 228 end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)offset + count);
227 offset_fsb = XFS_B_TO_FSBT(mp, offset); 229 offset_fsb = XFS_B_TO_FSBT(mp, offset);
228 230
229 error = XFS_BMAPI(mp, NULL, io, offset_fsb, 231 error = xfs_bmapi(NULL, ip, offset_fsb,
230 (xfs_filblks_t)(end_fsb - offset_fsb), 232 (xfs_filblks_t)(end_fsb - offset_fsb),
231 bmapi_flags, NULL, 0, &imap, 233 bmapi_flags, NULL, 0, &imap,
232 &nimaps, NULL, NULL); 234 &nimaps, NULL, NULL);
@@ -240,42 +242,42 @@ xfs_iomap(
240 if (nimaps && 242 if (nimaps &&
241 (imap.br_startblock != HOLESTARTBLOCK) && 243 (imap.br_startblock != HOLESTARTBLOCK) &&
242 (imap.br_startblock != DELAYSTARTBLOCK)) { 244 (imap.br_startblock != DELAYSTARTBLOCK)) {
243 xfs_iomap_map_trace(XFS_IOMAP_WRITE_MAP, io, 245 xfs_iomap_map_trace(XFS_IOMAP_WRITE_MAP, ip,
244 offset, count, iomapp, &imap, flags); 246 offset, count, iomapp, &imap, flags);
245 break; 247 break;
246 } 248 }
247 249
248 if (flags & (BMAPI_DIRECT|BMAPI_MMAP)) { 250 if (flags & (BMAPI_DIRECT|BMAPI_MMAP)) {
249 error = XFS_IOMAP_WRITE_DIRECT(mp, io, offset, 251 error = xfs_iomap_write_direct(ip, offset, count, flags,
250 count, flags, &imap, &nimaps, nimaps); 252 &imap, &nimaps, nimaps);
251 } else { 253 } else {
252 error = XFS_IOMAP_WRITE_DELAY(mp, io, offset, count, 254 error = xfs_iomap_write_delay(ip, offset, count, flags,
253 flags, &imap, &nimaps); 255 &imap, &nimaps);
254 } 256 }
255 if (!error) { 257 if (!error) {
256 xfs_iomap_map_trace(XFS_IOMAP_ALLOC_MAP, io, 258 xfs_iomap_map_trace(XFS_IOMAP_ALLOC_MAP, ip,
257 offset, count, iomapp, &imap, flags); 259 offset, count, iomapp, &imap, flags);
258 } 260 }
259 iomap_flags = IOMAP_NEW; 261 iomap_flags = IOMAP_NEW;
260 break; 262 break;
261 case BMAPI_ALLOCATE: 263 case BMAPI_ALLOCATE:
262 /* If we found an extent, return it */ 264 /* If we found an extent, return it */
263 XFS_IUNLOCK(mp, io, lockmode); 265 xfs_iunlock(ip, lockmode);
264 lockmode = 0; 266 lockmode = 0;
265 267
266 if (nimaps && !ISNULLSTARTBLOCK(imap.br_startblock)) { 268 if (nimaps && !ISNULLSTARTBLOCK(imap.br_startblock)) {
267 xfs_iomap_map_trace(XFS_IOMAP_WRITE_MAP, io, 269 xfs_iomap_map_trace(XFS_IOMAP_WRITE_MAP, ip,
268 offset, count, iomapp, &imap, flags); 270 offset, count, iomapp, &imap, flags);
269 break; 271 break;
270 } 272 }
271 273
272 error = XFS_IOMAP_WRITE_ALLOCATE(mp, io, offset, count, 274 error = xfs_iomap_write_allocate(ip, offset, count,
273 &imap, &nimaps); 275 &imap, &nimaps);
274 break; 276 break;
275 } 277 }
276 278
277 if (nimaps) { 279 if (nimaps) {
278 *niomaps = xfs_imap_to_bmap(io, offset, &imap, 280 *niomaps = xfs_imap_to_bmap(ip, offset, &imap,
279 iomapp, nimaps, *niomaps, iomap_flags); 281 iomapp, nimaps, *niomaps, iomap_flags);
280 } else if (niomaps) { 282 } else if (niomaps) {
281 *niomaps = 0; 283 *niomaps = 0;
@@ -283,14 +285,15 @@ xfs_iomap(
283 285
284out: 286out:
285 if (lockmode) 287 if (lockmode)
286 XFS_IUNLOCK(mp, io, lockmode); 288 xfs_iunlock(ip, lockmode);
287 return XFS_ERROR(error); 289 return XFS_ERROR(error);
288} 290}
289 291
292
290STATIC int 293STATIC int
291xfs_iomap_eof_align_last_fsb( 294xfs_iomap_eof_align_last_fsb(
292 xfs_mount_t *mp, 295 xfs_mount_t *mp,
293 xfs_iocore_t *io, 296 xfs_inode_t *ip,
294 xfs_fsize_t isize, 297 xfs_fsize_t isize,
295 xfs_extlen_t extsize, 298 xfs_extlen_t extsize,
296 xfs_fileoff_t *last_fsb) 299 xfs_fileoff_t *last_fsb)
@@ -299,7 +302,7 @@ xfs_iomap_eof_align_last_fsb(
299 xfs_extlen_t align; 302 xfs_extlen_t align;
300 int eof, error; 303 int eof, error;
301 304
302 if (io->io_flags & XFS_IOCORE_RT) 305 if (ip->i_d.di_flags & XFS_DIFLAG_REALTIME)
303 ; 306 ;
304 /* 307 /*
305 * If mounted with the "-o swalloc" option, roundup the allocation 308 * If mounted with the "-o swalloc" option, roundup the allocation
@@ -330,7 +333,7 @@ xfs_iomap_eof_align_last_fsb(
330 } 333 }
331 334
332 if (new_last_fsb) { 335 if (new_last_fsb) {
333 error = XFS_BMAP_EOF(mp, io, new_last_fsb, XFS_DATA_FORK, &eof); 336 error = xfs_bmap_eof(ip, new_last_fsb, XFS_DATA_FORK, &eof);
334 if (error) 337 if (error)
335 return error; 338 return error;
336 if (eof) 339 if (eof)
@@ -435,7 +438,7 @@ xfs_iomap_write_direct(
435 offset_fsb = XFS_B_TO_FSBT(mp, offset); 438 offset_fsb = XFS_B_TO_FSBT(mp, offset);
436 last_fsb = XFS_B_TO_FSB(mp, ((xfs_ufsize_t)(offset + count))); 439 last_fsb = XFS_B_TO_FSB(mp, ((xfs_ufsize_t)(offset + count)));
437 if ((offset + count) > isize) { 440 if ((offset + count) > isize) {
438 error = xfs_iomap_eof_align_last_fsb(mp, io, isize, extsz, 441 error = xfs_iomap_eof_align_last_fsb(mp, ip, isize, extsz,
439 &last_fsb); 442 &last_fsb);
440 if (error) 443 if (error)
441 goto error_out; 444 goto error_out;
@@ -502,7 +505,7 @@ xfs_iomap_write_direct(
502 */ 505 */
503 XFS_BMAP_INIT(&free_list, &firstfsb); 506 XFS_BMAP_INIT(&free_list, &firstfsb);
504 nimaps = 1; 507 nimaps = 1;
505 error = XFS_BMAPI(mp, tp, io, offset_fsb, count_fsb, bmapi_flag, 508 error = xfs_bmapi(tp, ip, offset_fsb, count_fsb, bmapi_flag,
506 &firstfsb, 0, &imap, &nimaps, &free_list, NULL); 509 &firstfsb, 0, &imap, &nimaps, &free_list, NULL);
507 if (error) 510 if (error)
508 goto error0; 511 goto error0;
@@ -560,7 +563,7 @@ error_out:
560STATIC int 563STATIC int
561xfs_iomap_eof_want_preallocate( 564xfs_iomap_eof_want_preallocate(
562 xfs_mount_t *mp, 565 xfs_mount_t *mp,
563 xfs_iocore_t *io, 566 xfs_inode_t *ip,
564 xfs_fsize_t isize, 567 xfs_fsize_t isize,
565 xfs_off_t offset, 568 xfs_off_t offset,
566 size_t count, 569 size_t count,
@@ -587,7 +590,7 @@ xfs_iomap_eof_want_preallocate(
587 while (count_fsb > 0) { 590 while (count_fsb > 0) {
588 imaps = nimaps; 591 imaps = nimaps;
589 firstblock = NULLFSBLOCK; 592 firstblock = NULLFSBLOCK;
590 error = XFS_BMAPI(mp, NULL, io, start_fsb, count_fsb, 0, 593 error = xfs_bmapi(NULL, ip, start_fsb, count_fsb, 0,
591 &firstblock, 0, imap, &imaps, NULL, NULL); 594 &firstblock, 0, imap, &imaps, NULL, NULL);
592 if (error) 595 if (error)
593 return error; 596 return error;
@@ -644,7 +647,7 @@ retry:
644 if (io->io_new_size > isize) 647 if (io->io_new_size > isize)
645 isize = io->io_new_size; 648 isize = io->io_new_size;
646 649
647 error = xfs_iomap_eof_want_preallocate(mp, io, isize, offset, count, 650 error = xfs_iomap_eof_want_preallocate(mp, ip, isize, offset, count,
648 ioflag, imap, XFS_WRITE_IMAPS, &prealloc); 651 ioflag, imap, XFS_WRITE_IMAPS, &prealloc);
649 if (error) 652 if (error)
650 return error; 653 return error;
@@ -658,7 +661,7 @@ retry:
658 } 661 }
659 662
660 if (prealloc || extsz) { 663 if (prealloc || extsz) {
661 error = xfs_iomap_eof_align_last_fsb(mp, io, isize, extsz, 664 error = xfs_iomap_eof_align_last_fsb(mp, ip, isize, extsz,
662 &last_fsb); 665 &last_fsb);
663 if (error) 666 if (error)
664 return error; 667 return error;
@@ -666,7 +669,7 @@ retry:
666 669
667 nimaps = XFS_WRITE_IMAPS; 670 nimaps = XFS_WRITE_IMAPS;
668 firstblock = NULLFSBLOCK; 671 firstblock = NULLFSBLOCK;
669 error = XFS_BMAPI(mp, NULL, io, offset_fsb, 672 error = xfs_bmapi(NULL, ip, offset_fsb,
670 (xfs_filblks_t)(last_fsb - offset_fsb), 673 (xfs_filblks_t)(last_fsb - offset_fsb),
671 XFS_BMAPI_DELAY | XFS_BMAPI_WRITE | 674 XFS_BMAPI_DELAY | XFS_BMAPI_WRITE |
672 XFS_BMAPI_ENTIRE, &firstblock, 1, imap, 675 XFS_BMAPI_ENTIRE, &firstblock, 1, imap,
@@ -680,7 +683,7 @@ retry:
680 */ 683 */
681 if (nimaps == 0) { 684 if (nimaps == 0) {
682 xfs_iomap_enter_trace(XFS_IOMAP_WRITE_NOSPACE, 685 xfs_iomap_enter_trace(XFS_IOMAP_WRITE_NOSPACE,
683 io, offset, count); 686 ip, offset, count);
684 if (xfs_flush_space(ip, &fsynced, &ioflag)) 687 if (xfs_flush_space(ip, &fsynced, &ioflag))
685 return XFS_ERROR(ENOSPC); 688 return XFS_ERROR(ENOSPC);
686 689
@@ -788,7 +791,7 @@ xfs_iomap_write_allocate(
788 } 791 }
789 792
790 /* Go get the actual blocks */ 793 /* Go get the actual blocks */
791 error = XFS_BMAPI(mp, tp, io, map_start_fsb, count_fsb, 794 error = xfs_bmapi(tp, ip, map_start_fsb, count_fsb,
792 XFS_BMAPI_WRITE, &first_block, 1, 795 XFS_BMAPI_WRITE, &first_block, 1,
793 imap, &nimaps, &free_list, NULL); 796 imap, &nimaps, &free_list, NULL);
794 if (error) 797 if (error)
@@ -860,8 +863,7 @@ xfs_iomap_write_unwritten(
860 int committed; 863 int committed;
861 int error; 864 int error;
862 865
863 xfs_iomap_enter_trace(XFS_IOMAP_UNWRITTEN, 866 xfs_iomap_enter_trace(XFS_IOMAP_UNWRITTEN, ip, offset, count);
864 &ip->i_iocore, offset, count);
865 867
866 offset_fsb = XFS_B_TO_FSBT(mp, offset); 868 offset_fsb = XFS_B_TO_FSBT(mp, offset);
867 count_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)offset + count); 869 count_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)offset + count);
@@ -895,7 +897,7 @@ xfs_iomap_write_unwritten(
895 */ 897 */
896 XFS_BMAP_INIT(&free_list, &firstfsb); 898 XFS_BMAP_INIT(&free_list, &firstfsb);
897 nimaps = 1; 899 nimaps = 1;
898 error = XFS_BMAPI(mp, tp, io, offset_fsb, count_fsb, 900 error = xfs_bmapi(tp, ip, offset_fsb, count_fsb,
899 XFS_BMAPI_WRITE|XFS_BMAPI_CONVERT, &firstfsb, 901 XFS_BMAPI_WRITE|XFS_BMAPI_CONVERT, &firstfsb,
900 1, &imap, &nimaps, &free_list, NULL); 902 1, &imap, &nimaps, &free_list, NULL);
901 if (error) 903 if (error)
diff --git a/fs/xfs/xfs_iomap.h b/fs/xfs/xfs_iomap.h
index c989e835bca5..ee1a0c134cc2 100644
--- a/fs/xfs/xfs_iomap.h
+++ b/fs/xfs/xfs_iomap.h
@@ -71,11 +71,10 @@ typedef struct xfs_iomap {
71 iomap_flags_t iomap_flags; 71 iomap_flags_t iomap_flags;
72} xfs_iomap_t; 72} xfs_iomap_t;
73 73
74struct xfs_iocore;
75struct xfs_inode; 74struct xfs_inode;
76struct xfs_bmbt_irec; 75struct xfs_bmbt_irec;
77 76
78extern int xfs_iomap(struct xfs_iocore *, xfs_off_t, ssize_t, int, 77extern int xfs_iomap(struct xfs_inode *, xfs_off_t, ssize_t, int,
79 struct xfs_iomap *, int *); 78 struct xfs_iomap *, int *);
80extern int xfs_iomap_write_direct(struct xfs_inode *, xfs_off_t, size_t, 79extern int xfs_iomap_write_direct(struct xfs_inode *, xfs_off_t, size_t,
81 int, struct xfs_bmbt_irec *, int *, int); 80 int, struct xfs_bmbt_irec *, int *, int);
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
index ebdb76da527c..f395f594e20c 100644
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -1255,7 +1255,6 @@ xfs_unmountfs(xfs_mount_t *mp, struct cred *cr)
1255#if defined(DEBUG) || defined(INDUCE_IO_ERROR) 1255#if defined(DEBUG) || defined(INDUCE_IO_ERROR)
1256 xfs_errortag_clearall(mp, 0); 1256 xfs_errortag_clearall(mp, 0);
1257#endif 1257#endif
1258 XFS_IODONE(mp);
1259 xfs_mount_free(mp); 1258 xfs_mount_free(mp);
1260 return 0; 1259 return 0;
1261} 1260}
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
index c618f7cb5f0e..f7b761f09ab4 100644
--- a/fs/xfs/xfs_mount.h
+++ b/fs/xfs/xfs_mount.h
@@ -196,105 +196,6 @@ typedef struct xfs_qmops {
196#define XFS_QM_QUOTACTL(mp, cmd, id, addr) \ 196#define XFS_QM_QUOTACTL(mp, cmd, id, addr) \
197 (*(mp)->m_qm_ops->xfs_quotactl)(mp, cmd, id, addr) 197 (*(mp)->m_qm_ops->xfs_quotactl)(mp, cmd, id, addr)
198 198
199
200/*
201 * Prototypes and functions for I/O core modularization.
202 */
203
204typedef int (*xfs_ioinit_t)(struct xfs_mount *,
205 struct xfs_mount_args *, int);
206typedef int (*xfs_bmapi_t)(struct xfs_trans *, void *,
207 xfs_fileoff_t, xfs_filblks_t, int,
208 xfs_fsblock_t *, xfs_extlen_t,
209 struct xfs_bmbt_irec *, int *,
210 struct xfs_bmap_free *, struct xfs_extdelta *);
211typedef int (*xfs_bunmapi_t)(struct xfs_trans *,
212 void *, xfs_fileoff_t,
213 xfs_filblks_t, int, xfs_extnum_t,
214 xfs_fsblock_t *, struct xfs_bmap_free *,
215 struct xfs_extdelta *, int *);
216typedef int (*xfs_bmap_eof_t)(void *, xfs_fileoff_t, int, int *);
217typedef int (*xfs_iomap_write_direct_t)(
218 void *, xfs_off_t, size_t, int,
219 struct xfs_bmbt_irec *, int *, int);
220typedef int (*xfs_iomap_write_delay_t)(
221 void *, xfs_off_t, size_t, int,
222 struct xfs_bmbt_irec *, int *);
223typedef int (*xfs_iomap_write_allocate_t)(
224 void *, xfs_off_t, size_t,
225 struct xfs_bmbt_irec *, int *);
226typedef int (*xfs_iomap_write_unwritten_t)(
227 void *, xfs_off_t, size_t);
228typedef uint (*xfs_lck_map_shared_t)(void *);
229typedef void (*xfs_lock_t)(void *, uint);
230typedef void (*xfs_lock_demote_t)(void *, uint);
231typedef int (*xfs_lock_nowait_t)(void *, uint);
232typedef void (*xfs_unlk_t)(void *, unsigned int);
233typedef xfs_fsize_t (*xfs_size_t)(void *);
234typedef xfs_fsize_t (*xfs_iodone_t)(struct xfs_mount *);
235typedef int (*xfs_swap_extents_t)(void *, void *,
236 struct xfs_swapext*);
237
238typedef struct xfs_ioops {
239 xfs_ioinit_t xfs_ioinit;
240 xfs_bmapi_t xfs_bmapi_func;
241 xfs_bunmapi_t xfs_bunmapi_func;
242 xfs_bmap_eof_t xfs_bmap_eof_func;
243 xfs_iomap_write_direct_t xfs_iomap_write_direct;
244 xfs_iomap_write_delay_t xfs_iomap_write_delay;
245 xfs_iomap_write_allocate_t xfs_iomap_write_allocate;
246 xfs_iomap_write_unwritten_t xfs_iomap_write_unwritten;
247 xfs_lock_t xfs_ilock;
248 xfs_lck_map_shared_t xfs_lck_map_shared;
249 xfs_lock_demote_t xfs_ilock_demote;
250 xfs_lock_nowait_t xfs_ilock_nowait;
251 xfs_unlk_t xfs_unlock;
252 xfs_size_t xfs_size_func;
253 xfs_iodone_t xfs_iodone;
254 xfs_swap_extents_t xfs_swap_extents_func;
255} xfs_ioops_t;
256
257#define XFS_IOINIT(mp, args, flags) \
258 (*(mp)->m_io_ops.xfs_ioinit)(mp, args, flags)
259#define XFS_BMAPI(mp, trans,io,bno,len,f,first,tot,mval,nmap,flist,delta) \
260 (*(mp)->m_io_ops.xfs_bmapi_func) \
261 (trans,(io)->io_obj,bno,len,f,first,tot,mval,nmap,flist,delta)
262#define XFS_BUNMAPI(mp, trans,io,bno,len,f,nexts,first,flist,delta,done) \
263 (*(mp)->m_io_ops.xfs_bunmapi_func) \
264 (trans,(io)->io_obj,bno,len,f,nexts,first,flist,delta,done)
265#define XFS_BMAP_EOF(mp, io, endoff, whichfork, eof) \
266 (*(mp)->m_io_ops.xfs_bmap_eof_func) \
267 ((io)->io_obj, endoff, whichfork, eof)
268#define XFS_IOMAP_WRITE_DIRECT(mp, io, offset, count, flags, mval, nmap, found)\
269 (*(mp)->m_io_ops.xfs_iomap_write_direct) \
270 ((io)->io_obj, offset, count, flags, mval, nmap, found)
271#define XFS_IOMAP_WRITE_DELAY(mp, io, offset, count, flags, mval, nmap) \
272 (*(mp)->m_io_ops.xfs_iomap_write_delay) \
273 ((io)->io_obj, offset, count, flags, mval, nmap)
274#define XFS_IOMAP_WRITE_ALLOCATE(mp, io, offset, count, mval, nmap) \
275 (*(mp)->m_io_ops.xfs_iomap_write_allocate) \
276 ((io)->io_obj, offset, count, mval, nmap)
277#define XFS_IOMAP_WRITE_UNWRITTEN(mp, io, offset, count) \
278 (*(mp)->m_io_ops.xfs_iomap_write_unwritten) \
279 ((io)->io_obj, offset, count)
280#define XFS_LCK_MAP_SHARED(mp, io) \
281 (*(mp)->m_io_ops.xfs_lck_map_shared)((io)->io_obj)
282#define XFS_ILOCK(mp, io, mode) \
283 (*(mp)->m_io_ops.xfs_ilock)((io)->io_obj, mode)
284#define XFS_ILOCK_NOWAIT(mp, io, mode) \
285 (*(mp)->m_io_ops.xfs_ilock_nowait)((io)->io_obj, mode)
286#define XFS_IUNLOCK(mp, io, mode) \
287 (*(mp)->m_io_ops.xfs_unlock)((io)->io_obj, mode)
288#define XFS_ILOCK_DEMOTE(mp, io, mode) \
289 (*(mp)->m_io_ops.xfs_ilock_demote)((io)->io_obj, mode)
290#define XFS_SIZE(mp, io) \
291 (*(mp)->m_io_ops.xfs_size_func)((io)->io_obj)
292#define XFS_IODONE(mp) \
293 (*(mp)->m_io_ops.xfs_iodone)(mp)
294#define XFS_SWAP_EXTENTS(mp, io, tio, sxp) \
295 (*(mp)->m_io_ops.xfs_swap_extents_func) \
296 ((io)->io_obj, (tio)->io_obj, sxp)
297
298#ifdef HAVE_PERCPU_SB 199#ifdef HAVE_PERCPU_SB
299 200
300/* 201/*
@@ -423,7 +324,6 @@ typedef struct xfs_mount {
423 * hash table */ 324 * hash table */
424 struct xfs_dmops *m_dm_ops; /* vector of DMI ops */ 325 struct xfs_dmops *m_dm_ops; /* vector of DMI ops */
425 struct xfs_qmops *m_qm_ops; /* vector of XQM ops */ 326 struct xfs_qmops *m_qm_ops; /* vector of XQM ops */
426 struct xfs_ioops m_io_ops; /* vector of I/O ops */
427 atomic_t m_active_trans; /* number trans frozen */ 327 atomic_t m_active_trans; /* number trans frozen */
428#ifdef HAVE_PERCPU_SB 328#ifdef HAVE_PERCPU_SB
429 xfs_icsb_cnts_t *m_sb_cnts; /* per-cpu superblock counters */ 329 xfs_icsb_cnts_t *m_sb_cnts; /* per-cpu superblock counters */
@@ -646,7 +546,6 @@ extern int xfs_qmops_get(struct xfs_mount *, struct xfs_mount_args *);
646extern void xfs_qmops_put(struct xfs_mount *); 546extern void xfs_qmops_put(struct xfs_mount *);
647 547
648extern struct xfs_dmops xfs_dmcore_xfs; 548extern struct xfs_dmops xfs_dmcore_xfs;
649extern struct xfs_ioops xfs_iocore_xfs;
650 549
651extern int xfs_init(void); 550extern int xfs_init(void);
652extern void xfs_cleanup(void); 551extern void xfs_cleanup(void);
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c
index 0f237f9f0c3a..57be2f7b034c 100644
--- a/fs/xfs/xfs_vfsops.c
+++ b/fs/xfs/xfs_vfsops.c
@@ -449,8 +449,6 @@ xfs_mount(
449 if (error) 449 if (error)
450 return error; 450 return error;
451 451
452 mp->m_io_ops = xfs_iocore_xfs;
453
454 if (args->flags & XFSMNT_QUIET) 452 if (args->flags & XFSMNT_QUIET)
455 flags |= XFS_MFSI_QUIET; 453 flags |= XFS_MFSI_QUIET;
456 454
@@ -544,7 +542,7 @@ xfs_mount(
544 if ((error = xfs_filestream_mount(mp))) 542 if ((error = xfs_filestream_mount(mp)))
545 goto error2; 543 goto error2;
546 544
547 error = XFS_IOINIT(mp, args, flags); 545 error = xfs_mountfs(mp, flags);
548 if (error) 546 if (error)
549 goto error2; 547 goto error2;
550 548
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c
index daba528bcc33..a5cd2dc4c80a 100644
--- a/fs/xfs/xfs_vnodeops.c
+++ b/fs/xfs/xfs_vnodeops.c
@@ -1187,7 +1187,7 @@ xfs_free_eofblocks(
1187 1187
1188 nimaps = 1; 1188 nimaps = 1;
1189 xfs_ilock(ip, XFS_ILOCK_SHARED); 1189 xfs_ilock(ip, XFS_ILOCK_SHARED);
1190 error = XFS_BMAPI(mp, NULL, &ip->i_iocore, end_fsb, map_len, 0, 1190 error = xfs_bmapi(NULL, ip, end_fsb, map_len, 0,
1191 NULL, 0, &imap, &nimaps, NULL, NULL); 1191 NULL, 0, &imap, &nimaps, NULL, NULL);
1192 xfs_iunlock(ip, XFS_ILOCK_SHARED); 1192 xfs_iunlock(ip, XFS_ILOCK_SHARED);
1193 1193
@@ -3972,7 +3972,7 @@ retry:
3972 * Issue the xfs_bmapi() call to allocate the blocks 3972 * Issue the xfs_bmapi() call to allocate the blocks
3973 */ 3973 */
3974 XFS_BMAP_INIT(&free_list, &firstfsb); 3974 XFS_BMAP_INIT(&free_list, &firstfsb);
3975 error = XFS_BMAPI(mp, tp, &ip->i_iocore, startoffset_fsb, 3975 error = xfs_bmapi(tp, ip, startoffset_fsb,
3976 allocatesize_fsb, bmapi_flag, 3976 allocatesize_fsb, bmapi_flag,
3977 &firstfsb, 0, imapp, &nimaps, 3977 &firstfsb, 0, imapp, &nimaps,
3978 &free_list, NULL); 3978 &free_list, NULL);
@@ -4054,7 +4054,7 @@ xfs_zero_remaining_bytes(
4054 for (offset = startoff; offset <= endoff; offset = lastoffset + 1) { 4054 for (offset = startoff; offset <= endoff; offset = lastoffset + 1) {
4055 offset_fsb = XFS_B_TO_FSBT(mp, offset); 4055 offset_fsb = XFS_B_TO_FSBT(mp, offset);
4056 nimap = 1; 4056 nimap = 1;
4057 error = XFS_BMAPI(mp, NULL, &ip->i_iocore, offset_fsb, 1, 0, 4057 error = xfs_bmapi(NULL, ip, offset_fsb, 1, 0,
4058 NULL, 0, &imap, &nimap, NULL, NULL); 4058 NULL, 0, &imap, &nimap, NULL, NULL);
4059 if (error || nimap < 1) 4059 if (error || nimap < 1)
4060 break; 4060 break;
@@ -4189,7 +4189,7 @@ xfs_free_file_space(
4189 */ 4189 */
4190 if (rt && !XFS_SB_VERSION_HASEXTFLGBIT(&mp->m_sb)) { 4190 if (rt && !XFS_SB_VERSION_HASEXTFLGBIT(&mp->m_sb)) {
4191 nimap = 1; 4191 nimap = 1;
4192 error = XFS_BMAPI(mp, NULL, &ip->i_iocore, startoffset_fsb, 4192 error = xfs_bmapi(NULL, ip, startoffset_fsb,
4193 1, 0, NULL, 0, &imap, &nimap, NULL, NULL); 4193 1, 0, NULL, 0, &imap, &nimap, NULL, NULL);
4194 if (error) 4194 if (error)
4195 goto out_unlock_iolock; 4195 goto out_unlock_iolock;
@@ -4204,7 +4204,7 @@ xfs_free_file_space(
4204 startoffset_fsb += mp->m_sb.sb_rextsize - mod; 4204 startoffset_fsb += mp->m_sb.sb_rextsize - mod;
4205 } 4205 }
4206 nimap = 1; 4206 nimap = 1;
4207 error = XFS_BMAPI(mp, NULL, &ip->i_iocore, endoffset_fsb - 1, 4207 error = xfs_bmapi(NULL, ip, endoffset_fsb - 1,
4208 1, 0, NULL, 0, &imap, &nimap, NULL, NULL); 4208 1, 0, NULL, 0, &imap, &nimap, NULL, NULL);
4209 if (error) 4209 if (error)
4210 goto out_unlock_iolock; 4210 goto out_unlock_iolock;
@@ -4280,7 +4280,7 @@ xfs_free_file_space(
4280 * issue the bunmapi() call to free the blocks 4280 * issue the bunmapi() call to free the blocks
4281 */ 4281 */
4282 XFS_BMAP_INIT(&free_list, &firstfsb); 4282 XFS_BMAP_INIT(&free_list, &firstfsb);
4283 error = XFS_BUNMAPI(mp, tp, &ip->i_iocore, startoffset_fsb, 4283 error = xfs_bunmapi(tp, ip, startoffset_fsb,
4284 endoffset_fsb - startoffset_fsb, 4284 endoffset_fsb - startoffset_fsb,
4285 0, 2, &firstfsb, &free_list, NULL, &done); 4285 0, 2, &firstfsb, &free_list, NULL, &done);
4286 if (error) { 4286 if (error) {