diff options
author | Lachlan McIlroy <lachlan@sgi.com> | 2007-10-11 03:34:33 -0400 |
---|---|---|
committer | Lachlan McIlroy <lachlan@redback.melbourne.sgi.com> | 2008-02-07 00:44:14 -0500 |
commit | 541d7d3c4b31e2b0ac846fe6d2eb5cdbe1353095 (patch) | |
tree | d8c9cf9cf75fd3d23ebc19e5f6b646a4d807b72c /fs | |
parent | 21a62542b6d7f726d6c1d2cfbfa084f721ba4a26 (diff) |
[XFS] kill unnessecary ioops indirection
Currently there is an indirection called ioops in the XFS data I/O path.
Various functions are called by functions pointers, but there is no
coherence in what this is for, and of course for XFS itself it's entirely
unused. This patch removes it instead and significantly reduces source and
binary size of XFS while making maintaince easier.
SGI-PV: 970841
SGI-Modid: xfs-linux-melb:xfs-kern:29737a
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Tim Shimmin <tes@sgi.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 4 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.c | 56 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.h | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_dfrag.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.c | 8 | ||||
-rw-r--r-- | fs/xfs/xfs_iocore.c | 40 | ||||
-rw-r--r-- | fs/xfs/xfs_iomap.c | 94 | ||||
-rw-r--r-- | fs/xfs/xfs_iomap.h | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_mount.c | 1 | ||||
-rw-r--r-- | fs/xfs/xfs_mount.h | 101 | ||||
-rw-r--r-- | fs/xfs/xfs_vfsops.c | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_vnodeops.c | 12 |
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 | */ |
132 | STATIC int | 132 | STATIC int |
133 | xfs_iozero( | 133 | xfs_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 | */ |
390 | STATIC int /* error (positive) */ | 390 | STATIC int /* error (positive) */ |
391 | xfs_zero_last_block( | 391 | xfs_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 | ||
459 | int /* error (positive) */ | 458 | int /* error (positive) */ |
460 | xfs_zero_eof( | 459 | xfs_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 | ||
566 | out_lock: | 564 | out_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 | |||
898 | int | ||
899 | xfs_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 *); | |||
73 | extern int xfs_bdstrat_cb(struct xfs_buf *); | 73 | extern int xfs_bdstrat_cb(struct xfs_buf *); |
74 | extern int xfs_dev_is_read_only(struct xfs_mount *, char *); | 74 | extern int xfs_dev_is_read_only(struct xfs_mount *, char *); |
75 | 75 | ||
76 | extern int xfs_zero_eof(struct inode *, struct xfs_iocore *, xfs_off_t, | 76 | extern 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 | |||
51 | STATIC xfs_fsize_t | ||
52 | xfs_size_fn( | ||
53 | xfs_inode_t *ip) | ||
54 | { | ||
55 | return XFS_ISIZE(ip); | ||
56 | } | ||
57 | |||
58 | STATIC int | ||
59 | xfs_ioinit( | ||
60 | struct xfs_mount *mp, | ||
61 | struct xfs_mount_args *mntargs, | ||
62 | int flags) | ||
63 | { | ||
64 | return xfs_mountfs(mp, flags); | ||
65 | } | ||
66 | |||
67 | xfs_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 | |||
90 | void | 50 | void |
91 | xfs_iocore_inode_reinit( | 51 | xfs_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 @@ | |||
53 | void | 53 | void |
54 | xfs_iomap_enter_trace( | 54 | xfs_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( | |||
84 | void | 84 | void |
85 | xfs_iomap_map_trace( | 85 | xfs_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 | ||
127 | STATIC int | 125 | STATIC int |
128 | xfs_imap_to_bmap( | 126 | xfs_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 | ||
173 | int | 170 | int |
174 | xfs_iomap( | 171 | xfs_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 | ||
284 | out: | 286 | out: |
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 | |||
290 | STATIC int | 293 | STATIC int |
291 | xfs_iomap_eof_align_last_fsb( | 294 | xfs_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: | |||
560 | STATIC int | 563 | STATIC int |
561 | xfs_iomap_eof_want_preallocate( | 564 | xfs_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 | ||
74 | struct xfs_iocore; | ||
75 | struct xfs_inode; | 74 | struct xfs_inode; |
76 | struct xfs_bmbt_irec; | 75 | struct xfs_bmbt_irec; |
77 | 76 | ||
78 | extern int xfs_iomap(struct xfs_iocore *, xfs_off_t, ssize_t, int, | 77 | extern int xfs_iomap(struct xfs_inode *, xfs_off_t, ssize_t, int, |
79 | struct xfs_iomap *, int *); | 78 | struct xfs_iomap *, int *); |
80 | extern int xfs_iomap_write_direct(struct xfs_inode *, xfs_off_t, size_t, | 79 | extern 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 | |||
204 | typedef int (*xfs_ioinit_t)(struct xfs_mount *, | ||
205 | struct xfs_mount_args *, int); | ||
206 | typedef 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 *); | ||
211 | typedef 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 *); | ||
216 | typedef int (*xfs_bmap_eof_t)(void *, xfs_fileoff_t, int, int *); | ||
217 | typedef int (*xfs_iomap_write_direct_t)( | ||
218 | void *, xfs_off_t, size_t, int, | ||
219 | struct xfs_bmbt_irec *, int *, int); | ||
220 | typedef int (*xfs_iomap_write_delay_t)( | ||
221 | void *, xfs_off_t, size_t, int, | ||
222 | struct xfs_bmbt_irec *, int *); | ||
223 | typedef int (*xfs_iomap_write_allocate_t)( | ||
224 | void *, xfs_off_t, size_t, | ||
225 | struct xfs_bmbt_irec *, int *); | ||
226 | typedef int (*xfs_iomap_write_unwritten_t)( | ||
227 | void *, xfs_off_t, size_t); | ||
228 | typedef uint (*xfs_lck_map_shared_t)(void *); | ||
229 | typedef void (*xfs_lock_t)(void *, uint); | ||
230 | typedef void (*xfs_lock_demote_t)(void *, uint); | ||
231 | typedef int (*xfs_lock_nowait_t)(void *, uint); | ||
232 | typedef void (*xfs_unlk_t)(void *, unsigned int); | ||
233 | typedef xfs_fsize_t (*xfs_size_t)(void *); | ||
234 | typedef xfs_fsize_t (*xfs_iodone_t)(struct xfs_mount *); | ||
235 | typedef int (*xfs_swap_extents_t)(void *, void *, | ||
236 | struct xfs_swapext*); | ||
237 | |||
238 | typedef 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 *); | |||
646 | extern void xfs_qmops_put(struct xfs_mount *); | 546 | extern void xfs_qmops_put(struct xfs_mount *); |
647 | 547 | ||
648 | extern struct xfs_dmops xfs_dmcore_xfs; | 548 | extern struct xfs_dmops xfs_dmcore_xfs; |
649 | extern struct xfs_ioops xfs_iocore_xfs; | ||
650 | 549 | ||
651 | extern int xfs_init(void); | 550 | extern int xfs_init(void); |
652 | extern void xfs_cleanup(void); | 551 | extern 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) { |