From: Nicolas Droux Date: Fri, 26 May 2017 15:50:17 +0000 (-0600) Subject: dtrace: io provider probes for nfs X-Git-Tag: v4.1.12-104.0.20170618_1145~117^2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=fe27135de6e7cb9ce94548a6c81aa84b4abbf0a3;p=users%2Fjedix%2Flinux-maple.git dtrace: io provider probes for nfs DTrace io provider probes are added for NFS read and write requests. Orabug: 26242655 Signed-off-by: Nicolas Droux Acked-by: Saar Maoz Acked-by: Rajan Shanmugavelu Reviewed-by: Chuck Lever --- diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 9e6475bc5ba2..12efee9cdede 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -7,6 +7,7 @@ #include #include #include +#include #define NFS_MS_MASK (MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_SYNCHRONOUS) @@ -681,3 +682,16 @@ static inline u32 nfs_fhandle_hash(const struct nfs_fh *fh) return 0; } #endif + +#define DTRACE_IO_NFS(name, rw, size, inode) \ + if (DTRACE_IO_ENABLED(name)) { \ + struct bio bio = { \ + .bi_rw = rw, \ + .bi_flags = (1 << BIO_USER_MAPPED), \ + .bi_iter.bi_size = size, \ + .bi_iter.bi_sector = NFS_FILEID(inode), \ + }; \ + DTRACE_IO(name, struct bio * : (bufinfo_t *, \ + devinfo_t *), &bio, \ + struct file * : fileinfo_t *, NULL); \ +} diff --git a/fs/nfs/read.c b/fs/nfs/read.c index 01b8cc8e8cfc..910638fd7d19 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c @@ -191,6 +191,8 @@ static void nfs_initiate_read(struct nfs_pgio_header *hdr, struct inode *inode = hdr->inode; int swap_flags = IS_SWAPFILE(inode) ? NFS_RPC_SWAPFLAGS : 0; + DTRACE_IO_NFS(start, 0, hdr->args.count, hdr->inode); + task_setup_data->flags |= swap_flags; rpc_ops->read_setup(hdr, msg); } @@ -221,6 +223,7 @@ static int nfs_readpage_done(struct rpc_task *task, struct inode *inode) { int status = NFS_PROTO(inode)->read_done(task, hdr); + DTRACE_IO_NFS(done, 0, hdr->res.count, hdr->inode); if (status != 0) return status; diff --git a/fs/nfs/write.c b/fs/nfs/write.c index d9851a6a2813..c7ffcb16d432 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -1278,6 +1278,8 @@ static void nfs_initiate_write(struct nfs_pgio_header *hdr, task_setup_data->priority = priority; rpc_ops->write_setup(hdr, msg); + DTRACE_IO_NFS(start, REQ_WRITE, hdr->args.count, hdr->inode); + nfs4_state_protect_write(NFS_SERVER(hdr->inode)->nfs_client, &task_setup_data->rpc_client, msg, hdr); } @@ -1431,6 +1433,7 @@ static int nfs_writeback_done(struct rpc_task *task, * depend on tighter cache coherency when writing. */ status = NFS_PROTO(inode)->write_done(task, hdr); + DTRACE_IO_NFS(done, REQ_WRITE, hdr->res.count, hdr->inode); if (status != 0) return status; nfs_add_stats(inode, NFSIOS_SERVERWRITTENBYTES, hdr->res.count);