diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_lrw.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.c | 87 |
1 files changed, 11 insertions, 76 deletions
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c index 1bf47f219c97..0d32457abef1 100644 --- a/fs/xfs/linux-2.6/xfs_lrw.c +++ b/fs/xfs/linux-2.6/xfs_lrw.c | |||
@@ -48,73 +48,12 @@ | |||
48 | #include "xfs_utils.h" | 48 | #include "xfs_utils.h" |
49 | #include "xfs_iomap.h" | 49 | #include "xfs_iomap.h" |
50 | #include "xfs_vnodeops.h" | 50 | #include "xfs_vnodeops.h" |
51 | #include "xfs_trace.h" | ||
51 | 52 | ||
52 | #include <linux/capability.h> | 53 | #include <linux/capability.h> |
53 | #include <linux/writeback.h> | 54 | #include <linux/writeback.h> |
54 | 55 | ||
55 | 56 | ||
56 | #if defined(XFS_RW_TRACE) | ||
57 | void | ||
58 | xfs_rw_enter_trace( | ||
59 | int tag, | ||
60 | xfs_inode_t *ip, | ||
61 | void *data, | ||
62 | size_t segs, | ||
63 | loff_t offset, | ||
64 | int ioflags) | ||
65 | { | ||
66 | if (ip->i_rwtrace == NULL) | ||
67 | return; | ||
68 | ktrace_enter(ip->i_rwtrace, | ||
69 | (void *)(unsigned long)tag, | ||
70 | (void *)ip, | ||
71 | (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), | ||
72 | (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), | ||
73 | (void *)data, | ||
74 | (void *)((unsigned long)segs), | ||
75 | (void *)((unsigned long)((offset >> 32) & 0xffffffff)), | ||
76 | (void *)((unsigned long)(offset & 0xffffffff)), | ||
77 | (void *)((unsigned long)ioflags), | ||
78 | (void *)((unsigned long)((ip->i_new_size >> 32) & 0xffffffff)), | ||
79 | (void *)((unsigned long)(ip->i_new_size & 0xffffffff)), | ||
80 | (void *)((unsigned long)current_pid()), | ||
81 | (void *)NULL, | ||
82 | (void *)NULL, | ||
83 | (void *)NULL, | ||
84 | (void *)NULL); | ||
85 | } | ||
86 | |||
87 | void | ||
88 | xfs_inval_cached_trace( | ||
89 | xfs_inode_t *ip, | ||
90 | xfs_off_t offset, | ||
91 | xfs_off_t len, | ||
92 | xfs_off_t first, | ||
93 | xfs_off_t last) | ||
94 | { | ||
95 | |||
96 | if (ip->i_rwtrace == NULL) | ||
97 | return; | ||
98 | ktrace_enter(ip->i_rwtrace, | ||
99 | (void *)(__psint_t)XFS_INVAL_CACHED, | ||
100 | (void *)ip, | ||
101 | (void *)((unsigned long)((offset >> 32) & 0xffffffff)), | ||
102 | (void *)((unsigned long)(offset & 0xffffffff)), | ||
103 | (void *)((unsigned long)((len >> 32) & 0xffffffff)), | ||
104 | (void *)((unsigned long)(len & 0xffffffff)), | ||
105 | (void *)((unsigned long)((first >> 32) & 0xffffffff)), | ||
106 | (void *)((unsigned long)(first & 0xffffffff)), | ||
107 | (void *)((unsigned long)((last >> 32) & 0xffffffff)), | ||
108 | (void *)((unsigned long)(last & 0xffffffff)), | ||
109 | (void *)((unsigned long)current_pid()), | ||
110 | (void *)NULL, | ||
111 | (void *)NULL, | ||
112 | (void *)NULL, | ||
113 | (void *)NULL, | ||
114 | (void *)NULL); | ||
115 | } | ||
116 | #endif | ||
117 | |||
118 | /* | 57 | /* |
119 | * xfs_iozero | 58 | * xfs_iozero |
120 | * | 59 | * |
@@ -250,8 +189,7 @@ xfs_read( | |||
250 | } | 189 | } |
251 | } | 190 | } |
252 | 191 | ||
253 | xfs_rw_enter_trace(XFS_READ_ENTER, ip, | 192 | trace_xfs_file_read(ip, size, *offset, ioflags); |
254 | (void *)iovp, segs, *offset, ioflags); | ||
255 | 193 | ||
256 | iocb->ki_pos = *offset; | 194 | iocb->ki_pos = *offset; |
257 | ret = generic_file_aio_read(iocb, iovp, segs, *offset); | 195 | ret = generic_file_aio_read(iocb, iovp, segs, *offset); |
@@ -292,8 +230,9 @@ xfs_splice_read( | |||
292 | return -error; | 230 | return -error; |
293 | } | 231 | } |
294 | } | 232 | } |
295 | xfs_rw_enter_trace(XFS_SPLICE_READ_ENTER, ip, | 233 | |
296 | pipe, count, *ppos, ioflags); | 234 | trace_xfs_file_splice_read(ip, count, *ppos, ioflags); |
235 | |||
297 | ret = generic_file_splice_read(infilp, ppos, pipe, count, flags); | 236 | ret = generic_file_splice_read(infilp, ppos, pipe, count, flags); |
298 | if (ret > 0) | 237 | if (ret > 0) |
299 | XFS_STATS_ADD(xs_read_bytes, ret); | 238 | XFS_STATS_ADD(xs_read_bytes, ret); |
@@ -342,8 +281,8 @@ xfs_splice_write( | |||
342 | ip->i_new_size = new_size; | 281 | ip->i_new_size = new_size; |
343 | xfs_iunlock(ip, XFS_ILOCK_EXCL); | 282 | xfs_iunlock(ip, XFS_ILOCK_EXCL); |
344 | 283 | ||
345 | xfs_rw_enter_trace(XFS_SPLICE_WRITE_ENTER, ip, | 284 | trace_xfs_file_splice_write(ip, count, *ppos, ioflags); |
346 | pipe, count, *ppos, ioflags); | 285 | |
347 | ret = generic_file_splice_write(pipe, outfilp, ppos, count, flags); | 286 | ret = generic_file_splice_write(pipe, outfilp, ppos, count, flags); |
348 | if (ret > 0) | 287 | if (ret > 0) |
349 | XFS_STATS_ADD(xs_write_bytes, ret); | 288 | XFS_STATS_ADD(xs_write_bytes, ret); |
@@ -710,8 +649,6 @@ start: | |||
710 | if ((ioflags & IO_ISDIRECT)) { | 649 | if ((ioflags & IO_ISDIRECT)) { |
711 | if (mapping->nrpages) { | 650 | if (mapping->nrpages) { |
712 | WARN_ON(need_i_mutex == 0); | 651 | WARN_ON(need_i_mutex == 0); |
713 | xfs_inval_cached_trace(xip, pos, -1, | ||
714 | (pos & PAGE_CACHE_MASK), -1); | ||
715 | error = xfs_flushinval_pages(xip, | 652 | error = xfs_flushinval_pages(xip, |
716 | (pos & PAGE_CACHE_MASK), | 653 | (pos & PAGE_CACHE_MASK), |
717 | -1, FI_REMAPF_LOCKED); | 654 | -1, FI_REMAPF_LOCKED); |
@@ -728,8 +665,7 @@ start: | |||
728 | need_i_mutex = 0; | 665 | need_i_mutex = 0; |
729 | } | 666 | } |
730 | 667 | ||
731 | xfs_rw_enter_trace(XFS_DIOWR_ENTER, xip, (void *)iovp, segs, | 668 | trace_xfs_file_direct_write(xip, count, *offset, ioflags); |
732 | *offset, ioflags); | ||
733 | ret = generic_file_direct_write(iocb, iovp, | 669 | ret = generic_file_direct_write(iocb, iovp, |
734 | &segs, pos, offset, count, ocount); | 670 | &segs, pos, offset, count, ocount); |
735 | 671 | ||
@@ -752,8 +688,7 @@ start: | |||
752 | ssize_t ret2 = 0; | 688 | ssize_t ret2 = 0; |
753 | 689 | ||
754 | write_retry: | 690 | write_retry: |
755 | xfs_rw_enter_trace(XFS_WRITE_ENTER, xip, (void *)iovp, segs, | 691 | trace_xfs_file_buffered_write(xip, count, *offset, ioflags); |
756 | *offset, ioflags); | ||
757 | ret2 = generic_file_buffered_write(iocb, iovp, segs, | 692 | ret2 = generic_file_buffered_write(iocb, iovp, segs, |
758 | pos, offset, count, ret); | 693 | pos, offset, count, ret); |
759 | /* | 694 | /* |
@@ -858,7 +793,7 @@ int | |||
858 | xfs_bdstrat_cb(struct xfs_buf *bp) | 793 | xfs_bdstrat_cb(struct xfs_buf *bp) |
859 | { | 794 | { |
860 | if (XFS_FORCED_SHUTDOWN(bp->b_mount)) { | 795 | if (XFS_FORCED_SHUTDOWN(bp->b_mount)) { |
861 | xfs_buftrace("XFS__BDSTRAT IOERROR", bp); | 796 | trace_xfs_bdstrat_shut(bp, _RET_IP_); |
862 | /* | 797 | /* |
863 | * Metadata write that didn't get logged but | 798 | * Metadata write that didn't get logged but |
864 | * written delayed anyway. These aren't associated | 799 | * written delayed anyway. These aren't associated |
@@ -891,7 +826,7 @@ xfsbdstrat( | |||
891 | return; | 826 | return; |
892 | } | 827 | } |
893 | 828 | ||
894 | xfs_buftrace("XFSBDSTRAT IOERROR", bp); | 829 | trace_xfs_bdstrat_shut(bp, _RET_IP_); |
895 | xfs_bioerror_relse(bp); | 830 | xfs_bioerror_relse(bp); |
896 | } | 831 | } |
897 | 832 | ||