NFSD: Add trace point for SCSI fencing operation.

Add trace point to print client IP address, net namespace number,
device name and status of SCSI pr_preempt command.

Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

authored by Dai Ngo and committed by Chuck Lever 99f5aa14 6f52063d

+42 -1
+4 -1
fs/nfsd/blocklayout.c
··· 13 13 #include "pnfs.h" 14 14 #include "filecache.h" 15 15 #include "vfs.h" 16 + #include "trace.h" 16 17 17 18 #define NFSDDBG_FACILITY NFSDDBG_PNFS 18 19 ··· 399 398 { 400 399 struct nfs4_client *clp = ls->ls_stid.sc_client; 401 400 struct block_device *bdev = file->nf_file->f_path.mnt->mnt_sb->s_bdev; 401 + int status; 402 402 403 - bdev->bd_disk->fops->pr_ops->pr_preempt(bdev, NFSD_MDS_PR_KEY, 403 + status = bdev->bd_disk->fops->pr_ops->pr_preempt(bdev, NFSD_MDS_PR_KEY, 404 404 nfsd4_scsi_pr_key(clp), 405 405 PR_EXCLUSIVE_ACCESS_REG_ONLY, true); 406 + trace_nfsd_pnfs_fence(clp, bdev->bd_disk->disk_name, status); 406 407 } 407 408 408 409 const struct nfsd4_layout_ops scsi_layout_ops = {
+38
fs/nfsd/trace.h
··· 2614 2614 DEFINE_NFSD_VFS_GETATTR_EVENT(nfsd_vfs_getattr); 2615 2615 DEFINE_NFSD_VFS_GETATTR_EVENT(nfsd_vfs_statfs); 2616 2616 2617 + DECLARE_EVENT_CLASS(nfsd_pnfs_class, 2618 + TP_PROTO( 2619 + const struct nfs4_client *clp, 2620 + const char *dev, 2621 + int error 2622 + ), 2623 + TP_ARGS(clp, dev, error), 2624 + TP_STRUCT__entry( 2625 + __sockaddr(addr, sizeof(struct sockaddr_in6)) 2626 + __field(unsigned int, netns_ino) 2627 + __string(dev, dev) 2628 + __field(int, error) 2629 + ), 2630 + TP_fast_assign( 2631 + __assign_sockaddr(addr, &clp->cl_addr, 2632 + sizeof(struct sockaddr_in6)); 2633 + __entry->netns_ino = clp->net->ns.inum; 2634 + __assign_str(dev); 2635 + __entry->error = error; 2636 + ), 2637 + TP_printk("client=%pISpc nn=%d dev=%s error=%d", 2638 + __get_sockaddr(addr), 2639 + __entry->netns_ino, 2640 + __get_str(dev), 2641 + __entry->error 2642 + ) 2643 + ); 2644 + 2645 + #define DEFINE_NFSD_PNFS_ERR_EVENT(name) \ 2646 + DEFINE_EVENT(nfsd_pnfs_class, nfsd_pnfs_##name, \ 2647 + TP_PROTO( \ 2648 + const struct nfs4_client *clp, \ 2649 + const char *dev, \ 2650 + int error \ 2651 + ), \ 2652 + TP_ARGS(clp, dev, error)) 2653 + 2654 + DEFINE_NFSD_PNFS_ERR_EVENT(fence); 2617 2655 #endif /* _NFSD_TRACE_H */ 2618 2656 2619 2657 #undef TRACE_INCLUDE_PATH