diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_aops.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 72 |
1 files changed, 12 insertions, 60 deletions
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 87813e405cef..66abe36c1213 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include "xfs_rw.h" | 38 | #include "xfs_rw.h" |
39 | #include "xfs_iomap.h" | 39 | #include "xfs_iomap.h" |
40 | #include "xfs_vnodeops.h" | 40 | #include "xfs_vnodeops.h" |
41 | #include "xfs_trace.h" | ||
41 | #include <linux/mpage.h> | 42 | #include <linux/mpage.h> |
42 | #include <linux/pagevec.h> | 43 | #include <linux/pagevec.h> |
43 | #include <linux/writeback.h> | 44 | #include <linux/writeback.h> |
@@ -76,7 +77,7 @@ xfs_ioend_wake( | |||
76 | wake_up(to_ioend_wq(ip)); | 77 | wake_up(to_ioend_wq(ip)); |
77 | } | 78 | } |
78 | 79 | ||
79 | STATIC void | 80 | void |
80 | xfs_count_page_state( | 81 | xfs_count_page_state( |
81 | struct page *page, | 82 | struct page *page, |
82 | int *delalloc, | 83 | int *delalloc, |
@@ -98,48 +99,6 @@ xfs_count_page_state( | |||
98 | } while ((bh = bh->b_this_page) != head); | 99 | } while ((bh = bh->b_this_page) != head); |
99 | } | 100 | } |
100 | 101 | ||
101 | #if defined(XFS_RW_TRACE) | ||
102 | void | ||
103 | xfs_page_trace( | ||
104 | int tag, | ||
105 | struct inode *inode, | ||
106 | struct page *page, | ||
107 | unsigned long pgoff) | ||
108 | { | ||
109 | xfs_inode_t *ip; | ||
110 | loff_t isize = i_size_read(inode); | ||
111 | loff_t offset = page_offset(page); | ||
112 | int delalloc = -1, unmapped = -1, unwritten = -1; | ||
113 | |||
114 | if (page_has_buffers(page)) | ||
115 | xfs_count_page_state(page, &delalloc, &unmapped, &unwritten); | ||
116 | |||
117 | ip = XFS_I(inode); | ||
118 | if (!ip->i_rwtrace) | ||
119 | return; | ||
120 | |||
121 | ktrace_enter(ip->i_rwtrace, | ||
122 | (void *)((unsigned long)tag), | ||
123 | (void *)ip, | ||
124 | (void *)inode, | ||
125 | (void *)page, | ||
126 | (void *)pgoff, | ||
127 | (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), | ||
128 | (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), | ||
129 | (void *)((unsigned long)((isize >> 32) & 0xffffffff)), | ||
130 | (void *)((unsigned long)(isize & 0xffffffff)), | ||
131 | (void *)((unsigned long)((offset >> 32) & 0xffffffff)), | ||
132 | (void *)((unsigned long)(offset & 0xffffffff)), | ||
133 | (void *)((unsigned long)delalloc), | ||
134 | (void *)((unsigned long)unmapped), | ||
135 | (void *)((unsigned long)unwritten), | ||
136 | (void *)((unsigned long)current_pid()), | ||
137 | (void *)NULL); | ||
138 | } | ||
139 | #else | ||
140 | #define xfs_page_trace(tag, inode, page, pgoff) | ||
141 | #endif | ||
142 | |||
143 | STATIC struct block_device * | 102 | STATIC struct block_device * |
144 | xfs_find_bdev_for_inode( | 103 | xfs_find_bdev_for_inode( |
145 | struct xfs_inode *ip) | 104 | struct xfs_inode *ip) |
@@ -1202,7 +1161,7 @@ xfs_vm_writepage( | |||
1202 | int delalloc, unmapped, unwritten; | 1161 | int delalloc, unmapped, unwritten; |
1203 | struct inode *inode = page->mapping->host; | 1162 | struct inode *inode = page->mapping->host; |
1204 | 1163 | ||
1205 | xfs_page_trace(XFS_WRITEPAGE_ENTER, inode, page, 0); | 1164 | trace_xfs_writepage(inode, page, 0); |
1206 | 1165 | ||
1207 | /* | 1166 | /* |
1208 | * We need a transaction if: | 1167 | * We need a transaction if: |
@@ -1307,7 +1266,7 @@ xfs_vm_releasepage( | |||
1307 | .nr_to_write = 1, | 1266 | .nr_to_write = 1, |
1308 | }; | 1267 | }; |
1309 | 1268 | ||
1310 | xfs_page_trace(XFS_RELEASEPAGE_ENTER, inode, page, 0); | 1269 | trace_xfs_releasepage(inode, page, 0); |
1311 | 1270 | ||
1312 | if (!page_has_buffers(page)) | 1271 | if (!page_has_buffers(page)) |
1313 | return 0; | 1272 | return 0; |
@@ -1515,19 +1474,13 @@ xfs_vm_direct_IO( | |||
1515 | 1474 | ||
1516 | bdev = xfs_find_bdev_for_inode(XFS_I(inode)); | 1475 | bdev = xfs_find_bdev_for_inode(XFS_I(inode)); |
1517 | 1476 | ||
1518 | if (rw == WRITE) { | 1477 | iocb->private = xfs_alloc_ioend(inode, rw == WRITE ? |
1519 | iocb->private = xfs_alloc_ioend(inode, IOMAP_UNWRITTEN); | 1478 | IOMAP_UNWRITTEN : IOMAP_READ); |
1520 | ret = blockdev_direct_IO_own_locking(rw, iocb, inode, | 1479 | |
1521 | bdev, iov, offset, nr_segs, | 1480 | ret = blockdev_direct_IO_no_locking(rw, iocb, inode, bdev, iov, |
1522 | xfs_get_blocks_direct, | 1481 | offset, nr_segs, |
1523 | xfs_end_io_direct); | 1482 | xfs_get_blocks_direct, |
1524 | } else { | 1483 | xfs_end_io_direct); |
1525 | iocb->private = xfs_alloc_ioend(inode, IOMAP_READ); | ||
1526 | ret = blockdev_direct_IO_no_locking(rw, iocb, inode, | ||
1527 | bdev, iov, offset, nr_segs, | ||
1528 | xfs_get_blocks_direct, | ||
1529 | xfs_end_io_direct); | ||
1530 | } | ||
1531 | 1484 | ||
1532 | if (unlikely(ret != -EIOCBQUEUED && iocb->private)) | 1485 | if (unlikely(ret != -EIOCBQUEUED && iocb->private)) |
1533 | xfs_destroy_ioend(iocb->private); | 1486 | xfs_destroy_ioend(iocb->private); |
@@ -1587,8 +1540,7 @@ xfs_vm_invalidatepage( | |||
1587 | struct page *page, | 1540 | struct page *page, |
1588 | unsigned long offset) | 1541 | unsigned long offset) |
1589 | { | 1542 | { |
1590 | xfs_page_trace(XFS_INVALIDPAGE_ENTER, | 1543 | trace_xfs_invalidatepage(page->mapping->host, page, offset); |
1591 | page->mapping->host, page, offset); | ||
1592 | block_invalidatepage(page, offset); | 1544 | block_invalidatepage(page, offset); |
1593 | } | 1545 | } |
1594 | 1546 | ||