]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
pnfs: add pnfs_ds_connect trace point
authorTigran Mkrtchyan <tigran.mkrtchyan@desy.de>
Tue, 10 Jun 2025 15:12:46 +0000 (17:12 +0200)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 14 Jul 2025 22:20:03 +0000 (15:20 -0700)
This tracepoint aims to expose pnfs DS connect status

Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
Link: https://lore.kernel.org/r/20250610151246.9147-1-tigran.mkrtchyan@desy.de
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/nfs4trace.c
fs/nfs/nfs4trace.h
fs/nfs/pnfs_nfs.c

index 389941ccc9c9c44545ba58130177d260ef5b291a..436763a559cd964c7d3e34b49c414467e5d838e0 100644 (file)
@@ -26,6 +26,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(pnfs_mds_fallback_read_done);
 EXPORT_TRACEPOINT_SYMBOL_GPL(pnfs_mds_fallback_write_done);
 EXPORT_TRACEPOINT_SYMBOL_GPL(pnfs_mds_fallback_read_pagelist);
 EXPORT_TRACEPOINT_SYMBOL_GPL(pnfs_mds_fallback_write_pagelist);
+EXPORT_TRACEPOINT_SYMBOL_GPL(pnfs_ds_connect);
 
 EXPORT_TRACEPOINT_SYMBOL_GPL(ff_layout_read_error);
 EXPORT_TRACEPOINT_SYMBOL_GPL(ff_layout_write_error);
index 553e4550258891d5cc43c84056f27992f542824a..9f69d7e149255b632ca89f7e1c6c3943a6c5341f 100644 (file)
@@ -274,6 +274,32 @@ TRACE_EVENT(nfs4_cb_offload,
                        show_nfs_stable_how(__entry->cb_how)
                )
 );
+
+TRACE_EVENT(pnfs_ds_connect,
+               TP_PROTO(
+                       char *ds_remotestr,
+                       int status
+               ),
+
+               TP_ARGS(ds_remotestr, status),
+
+               TP_STRUCT__entry(
+                       __string(ds_ips, ds_remotestr)
+                       __field(int, status)
+               ),
+
+               TP_fast_assign(
+                       __assign_str(ds_ips);
+                       __entry->status = status;
+               ),
+
+               TP_printk(
+                       "ds_ips=%s, status=%d",
+                       __get_str(ds_ips),
+                       __entry->status
+                )
+);
+
 #endif /* CONFIG_NFS_V4_1 */
 
 TRACE_EVENT(nfs4_setup_sequence,
index b4ccdf78d4dde7480a8e4b608d9dce6b32d397da..7b32afb2978271923cf63d0727b3b7b8b0273c2f 100644 (file)
@@ -17,6 +17,7 @@
 #include "internal.h"
 #include "pnfs.h"
 #include "netns.h"
+#include "nfs4trace.h"
 
 #define NFSDBG_FACILITY                NFSDBG_PNFS
 
@@ -1007,8 +1008,10 @@ int nfs4_pnfs_ds_connect(struct nfs_server *mds_srv, struct nfs4_pnfs_ds *ds,
                err = nfs4_wait_ds_connect(ds);
                if (err || ds->ds_clp)
                        goto out;
-               if (nfs4_test_deviceid_unavailable(devid))
-                       return -ENODEV;
+               if (nfs4_test_deviceid_unavailable(devid)) {
+                       err = -ENODEV;
+                       goto out;
+               }
        } while (test_and_set_bit(NFS4DS_CONNECTING, &ds->ds_state) != 0);
 
        if (ds->ds_clp)
@@ -1038,11 +1041,12 @@ out:
                if (!ds->ds_clp || !nfs_client_init_is_complete(ds->ds_clp)) {
                        WARN_ON_ONCE(ds->ds_clp ||
                                !nfs4_test_deviceid_unavailable(devid));
-                       return -EINVAL;
-               }
-               err = nfs_client_init_status(ds->ds_clp);
+                       err = -EINVAL;
+               } else
+                       err = nfs_client_init_status(ds->ds_clp);
        }
 
+       trace_pnfs_ds_connect(ds->ds_remotestr, err);
        return err;
 }
 EXPORT_SYMBOL_GPL(nfs4_pnfs_ds_connect);