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 | ||
