summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2013-08-14 15:31:28 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2013-08-22 08:58:26 -0400
commitcc668ab30b8a5505c1651b073882c1a67c802a48 (patch)
tree32caf9dab1ba04fcd6ac5ed36215bf7b845c3212 /fs
parentb5f875a92591d06c57e786b3c916e21e290ad844 (diff)
NFSv4: Add tracepoints for debugging reads and writes
Set up tracepoints to track read, write and commit, as well as pNFS reads and writes and commits to the data server. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/nfs4filelayout.c4
-rw-r--r--fs/nfs/nfs4proc.c3
-rw-r--r--fs/nfs/nfs4trace.c5
-rw-r--r--fs/nfs/nfs4trace.h154
-rw-r--r--fs/nfs/pnfs.c3
5 files changed, 169 insertions, 0 deletions
diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index 17ed87ef9de8..a70cb3a0b96e 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -39,6 +39,7 @@
39#include "internal.h" 39#include "internal.h"
40#include "delegation.h" 40#include "delegation.h"
41#include "nfs4filelayout.h" 41#include "nfs4filelayout.h"
42#include "nfs4trace.h"
42 43
43#define NFSDBG_FACILITY NFSDBG_PNFS_LD 44#define NFSDBG_FACILITY NFSDBG_PNFS_LD
44 45
@@ -247,6 +248,7 @@ static int filelayout_read_done_cb(struct rpc_task *task,
247 struct nfs_pgio_header *hdr = data->header; 248 struct nfs_pgio_header *hdr = data->header;
248 int err; 249 int err;
249 250
251 trace_nfs4_pnfs_read(data, task->tk_status);
250 err = filelayout_async_handle_error(task, data->args.context->state, 252 err = filelayout_async_handle_error(task, data->args.context->state,
251 data->ds_clp, hdr->lseg); 253 data->ds_clp, hdr->lseg);
252 254
@@ -363,6 +365,7 @@ static int filelayout_write_done_cb(struct rpc_task *task,
363 struct nfs_pgio_header *hdr = data->header; 365 struct nfs_pgio_header *hdr = data->header;
364 int err; 366 int err;
365 367
368 trace_nfs4_pnfs_write(data, task->tk_status);
366 err = filelayout_async_handle_error(task, data->args.context->state, 369 err = filelayout_async_handle_error(task, data->args.context->state,
367 data->ds_clp, hdr->lseg); 370 data->ds_clp, hdr->lseg);
368 371
@@ -395,6 +398,7 @@ static int filelayout_commit_done_cb(struct rpc_task *task,
395{ 398{
396 int err; 399 int err;
397 400
401 trace_nfs4_pnfs_commit_ds(data, task->tk_status);
398 err = filelayout_async_handle_error(task, NULL, data->ds_clp, 402 err = filelayout_async_handle_error(task, NULL, data->ds_clp,
399 data->lseg); 403 data->lseg);
400 404
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index bcfe3adb2057..214f9c4fdeee 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -3881,6 +3881,7 @@ static int nfs4_read_done_cb(struct rpc_task *task, struct nfs_read_data *data)
3881{ 3881{
3882 struct nfs_server *server = NFS_SERVER(data->header->inode); 3882 struct nfs_server *server = NFS_SERVER(data->header->inode);
3883 3883
3884 trace_nfs4_read(data, task->tk_status);
3884 if (nfs4_async_handle_error(task, server, data->args.context->state) == -EAGAIN) { 3885 if (nfs4_async_handle_error(task, server, data->args.context->state) == -EAGAIN) {
3885 rpc_restart_call_prepare(task); 3886 rpc_restart_call_prepare(task);
3886 return -EAGAIN; 3887 return -EAGAIN;
@@ -3942,6 +3943,7 @@ static int nfs4_write_done_cb(struct rpc_task *task, struct nfs_write_data *data
3942{ 3943{
3943 struct inode *inode = data->header->inode; 3944 struct inode *inode = data->header->inode;
3944 3945
3946 trace_nfs4_write(data, task->tk_status);
3945 if (nfs4_async_handle_error(task, NFS_SERVER(inode), data->args.context->state) == -EAGAIN) { 3947 if (nfs4_async_handle_error(task, NFS_SERVER(inode), data->args.context->state) == -EAGAIN) {
3946 rpc_restart_call_prepare(task); 3948 rpc_restart_call_prepare(task);
3947 return -EAGAIN; 3949 return -EAGAIN;
@@ -4033,6 +4035,7 @@ static int nfs4_commit_done_cb(struct rpc_task *task, struct nfs_commit_data *da
4033{ 4035{
4034 struct inode *inode = data->inode; 4036 struct inode *inode = data->inode;
4035 4037
4038 trace_nfs4_commit(data, task->tk_status);
4036 if (nfs4_async_handle_error(task, NFS_SERVER(inode), NULL) == -EAGAIN) { 4039 if (nfs4_async_handle_error(task, NFS_SERVER(inode), NULL) == -EAGAIN) {
4037 rpc_restart_call_prepare(task); 4040 rpc_restart_call_prepare(task);
4038 return -EAGAIN; 4041 return -EAGAIN;
diff --git a/fs/nfs/nfs4trace.c b/fs/nfs/nfs4trace.c
index 3f0218365fc7..f8409743c5c5 100644
--- a/fs/nfs/nfs4trace.c
+++ b/fs/nfs/nfs4trace.c
@@ -8,3 +8,8 @@
8#define CREATE_TRACE_POINTS 8#define CREATE_TRACE_POINTS
9#include "nfs4trace.h" 9#include "nfs4trace.h"
10 10
11#ifdef CONFIG_NFS_V4_1
12EXPORT_TRACEPOINT_SYMBOL_GPL(nfs4_pnfs_read);
13EXPORT_TRACEPOINT_SYMBOL_GPL(nfs4_pnfs_write);
14EXPORT_TRACEPOINT_SYMBOL_GPL(nfs4_pnfs_commit_ds);
15#endif
diff --git a/fs/nfs/nfs4trace.h b/fs/nfs/nfs4trace.h
index 99d1b1e79650..1ea69836443f 100644
--- a/fs/nfs/nfs4trace.h
+++ b/fs/nfs/nfs4trace.h
@@ -742,6 +742,160 @@ DEFINE_NFS4_IDMAP_EVENT(nfs4_map_group_to_gid);
742DEFINE_NFS4_IDMAP_EVENT(nfs4_map_uid_to_name); 742DEFINE_NFS4_IDMAP_EVENT(nfs4_map_uid_to_name);
743DEFINE_NFS4_IDMAP_EVENT(nfs4_map_gid_to_group); 743DEFINE_NFS4_IDMAP_EVENT(nfs4_map_gid_to_group);
744 744
745DECLARE_EVENT_CLASS(nfs4_read_event,
746 TP_PROTO(
747 const struct nfs_read_data *data,
748 int error
749 ),
750
751 TP_ARGS(data, error),
752
753 TP_STRUCT__entry(
754 __field(dev_t, dev)
755 __field(u32, fhandle)
756 __field(u64, fileid)
757 __field(loff_t, offset)
758 __field(size_t, count)
759 __field(int, error)
760 ),
761
762 TP_fast_assign(
763 const struct inode *inode = data->header->inode;
764 __entry->dev = inode->i_sb->s_dev;
765 __entry->fileid = NFS_FILEID(inode);
766 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
767 __entry->offset = data->args.offset;
768 __entry->count = data->args.count;
769 __entry->error = error;
770 ),
771
772 TP_printk(
773 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
774 "offset=%lld count=%zu",
775 __entry->error,
776 show_nfsv4_errors(__entry->error),
777 MAJOR(__entry->dev), MINOR(__entry->dev),
778 (unsigned long long)__entry->fileid,
779 __entry->fhandle,
780 (long long)__entry->offset,
781 __entry->count
782 )
783);
784#define DEFINE_NFS4_READ_EVENT(name) \
785 DEFINE_EVENT(nfs4_read_event, name, \
786 TP_PROTO( \
787 const struct nfs_read_data *data, \
788 int error \
789 ), \
790 TP_ARGS(data, error))
791DEFINE_NFS4_READ_EVENT(nfs4_read);
792#ifdef CONFIG_NFS_V4_1
793DEFINE_NFS4_READ_EVENT(nfs4_pnfs_read);
794#endif /* CONFIG_NFS_V4_1 */
795
796DECLARE_EVENT_CLASS(nfs4_write_event,
797 TP_PROTO(
798 const struct nfs_write_data *data,
799 int error
800 ),
801
802 TP_ARGS(data, error),
803
804 TP_STRUCT__entry(
805 __field(dev_t, dev)
806 __field(u32, fhandle)
807 __field(u64, fileid)
808 __field(loff_t, offset)
809 __field(size_t, count)
810 __field(int, error)
811 ),
812
813 TP_fast_assign(
814 const struct inode *inode = data->header->inode;
815 __entry->dev = inode->i_sb->s_dev;
816 __entry->fileid = NFS_FILEID(inode);
817 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
818 __entry->offset = data->args.offset;
819 __entry->count = data->args.count;
820 __entry->error = error;
821 ),
822
823 TP_printk(
824 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
825 "offset=%lld count=%zu",
826 __entry->error,
827 show_nfsv4_errors(__entry->error),
828 MAJOR(__entry->dev), MINOR(__entry->dev),
829 (unsigned long long)__entry->fileid,
830 __entry->fhandle,
831 (long long)__entry->offset,
832 __entry->count
833 )
834);
835
836#define DEFINE_NFS4_WRITE_EVENT(name) \
837 DEFINE_EVENT(nfs4_write_event, name, \
838 TP_PROTO( \
839 const struct nfs_write_data *data, \
840 int error \
841 ), \
842 TP_ARGS(data, error))
843DEFINE_NFS4_WRITE_EVENT(nfs4_write);
844#ifdef CONFIG_NFS_V4_1
845DEFINE_NFS4_WRITE_EVENT(nfs4_pnfs_write);
846#endif /* CONFIG_NFS_V4_1 */
847
848DECLARE_EVENT_CLASS(nfs4_commit_event,
849 TP_PROTO(
850 const struct nfs_commit_data *data,
851 int error
852 ),
853
854 TP_ARGS(data, error),
855
856 TP_STRUCT__entry(
857 __field(dev_t, dev)
858 __field(u32, fhandle)
859 __field(u64, fileid)
860 __field(loff_t, offset)
861 __field(size_t, count)
862 __field(int, error)
863 ),
864
865 TP_fast_assign(
866 const struct inode *inode = data->inode;
867 __entry->dev = inode->i_sb->s_dev;
868 __entry->fileid = NFS_FILEID(inode);
869 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
870 __entry->offset = data->args.offset;
871 __entry->count = data->args.count;
872 __entry->error = error;
873 ),
874
875 TP_printk(
876 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
877 "offset=%lld count=%zu",
878 __entry->error,
879 show_nfsv4_errors(__entry->error),
880 MAJOR(__entry->dev), MINOR(__entry->dev),
881 (unsigned long long)__entry->fileid,
882 __entry->fhandle,
883 (long long)__entry->offset,
884 __entry->count
885 )
886);
887#define DEFINE_NFS4_COMMIT_EVENT(name) \
888 DEFINE_EVENT(nfs4_commit_event, name, \
889 TP_PROTO( \
890 const struct nfs_commit_data *data, \
891 int error \
892 ), \
893 TP_ARGS(data, error))
894DEFINE_NFS4_COMMIT_EVENT(nfs4_commit);
895#ifdef CONFIG_NFS_V4_1
896DEFINE_NFS4_COMMIT_EVENT(nfs4_pnfs_commit_ds);
897#endif /* CONFIG_NFS_V4_1 */
898
745#endif /* _TRACE_NFS4_H */ 899#endif /* _TRACE_NFS4_H */
746 900
747#undef TRACE_INCLUDE_PATH 901#undef TRACE_INCLUDE_PATH
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 3a3a79d6bf15..d75d938d36cb 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -33,6 +33,7 @@
33#include "internal.h" 33#include "internal.h"
34#include "pnfs.h" 34#include "pnfs.h"
35#include "iostat.h" 35#include "iostat.h"
36#include "nfs4trace.h"
36 37
37#define NFSDBG_FACILITY NFSDBG_PNFS 38#define NFSDBG_FACILITY NFSDBG_PNFS
38#define PNFS_LAYOUTGET_RETRY_TIMEOUT (120*HZ) 39#define PNFS_LAYOUTGET_RETRY_TIMEOUT (120*HZ)
@@ -1526,6 +1527,7 @@ void pnfs_ld_write_done(struct nfs_write_data *data)
1526{ 1527{
1527 struct nfs_pgio_header *hdr = data->header; 1528 struct nfs_pgio_header *hdr = data->header;
1528 1529
1530 trace_nfs4_pnfs_write(data, hdr->pnfs_error);
1529 if (!hdr->pnfs_error) { 1531 if (!hdr->pnfs_error) {
1530 pnfs_set_layoutcommit(data); 1532 pnfs_set_layoutcommit(data);
1531 hdr->mds_ops->rpc_call_done(&data->task, data); 1533 hdr->mds_ops->rpc_call_done(&data->task, data);
@@ -1680,6 +1682,7 @@ void pnfs_ld_read_done(struct nfs_read_data *data)
1680{ 1682{
1681 struct nfs_pgio_header *hdr = data->header; 1683 struct nfs_pgio_header *hdr = data->header;
1682 1684
1685 trace_nfs4_pnfs_read(data, hdr->pnfs_error);
1683 if (likely(!hdr->pnfs_error)) { 1686 if (likely(!hdr->pnfs_error)) {
1684 __nfs4_read_done_cb(data); 1687 __nfs4_read_done_cb(data);
1685 hdr->mds_ops->rpc_call_done(&data->task, data); 1688 hdr->mds_ops->rpc_call_done(&data->task, data);