diff options
-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) { |