]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
afs: Make afs_lookup_cell() take a trace note
authorDavid Howells <dhowells@redhat.com>
Mon, 24 Feb 2025 10:37:56 +0000 (10:37 +0000)
committerDavid Howells <dhowells@redhat.com>
Mon, 10 Mar 2025 09:47:15 +0000 (09:47 +0000)
Pass a note to be added to the afs_cell tracepoint to afs_lookup_cell() so
that different callers can be distinguished.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
cc: linux-fsdevel@vger.kernel.org
Link: https://lore.kernel.org/r/20250224234154.2014840-11-dhowells@redhat.com/
Link: https://lore.kernel.org/r/20250310094206.801057-7-dhowells@redhat.com/
fs/afs/cell.c
fs/afs/dynroot.c
fs/afs/internal.h
fs/afs/mntpt.c
fs/afs/proc.c
fs/afs/super.c
fs/afs/vl_alias.c
include/trace/events/afs.h

index c2e44cd2eb96cb97c5c7109f35899a01b7c552d0..73894180f6537009db30e5d1ceac27e7ea8e6c29 100644 (file)
@@ -233,6 +233,7 @@ error:
  * @namesz:    The strlen of the cell name.
  * @vllist:    A colon/comma separated list of numeric IP addresses or NULL.
  * @excl:      T if an error should be given if the cell name already exists.
+ * @trace:     The reason to be logged if the lookup is successful.
  *
  * Look up a cell record by name and query the DNS for VL server addresses if
  * needed.  Note that that actual DNS query is punted off to the manager thread
@@ -241,7 +242,8 @@ error:
  */
 struct afs_cell *afs_lookup_cell(struct afs_net *net,
                                 const char *name, unsigned int namesz,
-                                const char *vllist, bool excl)
+                                const char *vllist, bool excl,
+                                enum afs_cell_trace trace)
 {
        struct afs_cell *cell, *candidate, *cursor;
        struct rb_node *parent, **pp;
@@ -251,7 +253,7 @@ struct afs_cell *afs_lookup_cell(struct afs_net *net,
        _enter("%s,%s", name, vllist);
 
        if (!excl) {
-               cell = afs_find_cell(net, name, namesz, afs_cell_trace_use_lookup);
+               cell = afs_find_cell(net, name, namesz, trace);
                if (!IS_ERR(cell))
                        goto wait_for_cell;
        }
@@ -327,7 +329,7 @@ cell_already_exists:
        if (excl) {
                ret = -EEXIST;
        } else {
-               afs_use_cell(cursor, afs_cell_trace_use_lookup);
+               afs_use_cell(cursor, trace);
                ret = 0;
        }
        up_write(&net->cells_lock);
@@ -382,8 +384,9 @@ int afs_cell_init(struct afs_net *net, const char *rootcell)
        if (cp && cp < rootcell + len)
                return -EINVAL;
 
-       /* allocate a cell record for the root cell */
-       new_root = afs_lookup_cell(net, rootcell, len, vllist, false);
+       /* allocate a cell record for the root/workstation cell */
+       new_root = afs_lookup_cell(net, rootcell, len, vllist, false,
+                                  afs_cell_trace_use_lookup_ws);
        if (IS_ERR(new_root)) {
                _leave(" = %ld", PTR_ERR(new_root));
                return PTR_ERR(new_root);
index eb20e231d7ac2080e64d572f9eec97ab0522c5ec..4ff2a396dbd435825dcffd6d903c4839093bec79 100644 (file)
@@ -108,7 +108,8 @@ static struct dentry *afs_dynroot_lookup_cell(struct inode *dir, struct dentry *
                dotted = true;
        }
 
-       cell = afs_lookup_cell(net, name, len, NULL, false);
+       cell = afs_lookup_cell(net, name, len, NULL, false,
+                              afs_cell_trace_use_lookup_dynroot);
        if (IS_ERR(cell)) {
                ret = PTR_ERR(cell);
                goto out_no_cell;
index 97045e2a455decf36c94d85cb5236a4c50d5dd1c..24b87ae1152448e69a83ee60479ec6f9469f32b1 100644 (file)
@@ -1046,8 +1046,10 @@ static inline bool afs_cb_is_broken(unsigned int cb_break,
 extern int afs_cell_init(struct afs_net *, const char *);
 extern struct afs_cell *afs_find_cell(struct afs_net *, const char *, unsigned,
                                      enum afs_cell_trace);
-extern struct afs_cell *afs_lookup_cell(struct afs_net *, const char *, unsigned,
-                                       const char *, bool);
+struct afs_cell *afs_lookup_cell(struct afs_net *net,
+                                const char *name, unsigned int namesz,
+                                const char *vllist, bool excl,
+                                enum afs_cell_trace trace);
 extern struct afs_cell *afs_use_cell(struct afs_cell *, enum afs_cell_trace);
 extern void afs_unuse_cell(struct afs_net *, struct afs_cell *, enum afs_cell_trace);
 extern struct afs_cell *afs_get_cell(struct afs_cell *, enum afs_cell_trace);
index 507c25a5b2cb10ccdba1b1e2cf4b23e99978d60d..4a3edb9990b04849997c978d9d4f7317dd56f8fc 100644 (file)
@@ -107,7 +107,8 @@ static int afs_mntpt_set_params(struct fs_context *fc, struct dentry *mntpt)
                if (size > AFS_MAXCELLNAME)
                        return -ENAMETOOLONG;
 
-               cell = afs_lookup_cell(ctx->net, p, size, NULL, false);
+               cell = afs_lookup_cell(ctx->net, p, size, NULL, false,
+                                      afs_cell_trace_use_lookup_mntpt);
                if (IS_ERR(cell)) {
                        pr_err("kAFS: unable to lookup cell '%pd'\n", mntpt);
                        return PTR_ERR(cell);
index 12c88d8be3fe8bb40f49598ce0b7e72801c04e5c..fc7027fc3084a3dd4a60d52c831057d3c9053a99 100644 (file)
@@ -122,7 +122,8 @@ static int afs_proc_cells_write(struct file *file, char *buf, size_t size)
        if (strcmp(buf, "add") == 0) {
                struct afs_cell *cell;
 
-               cell = afs_lookup_cell(net, name, strlen(name), args, true);
+               cell = afs_lookup_cell(net, name, strlen(name), args, true,
+                                      afs_cell_trace_use_lookup_add);
                if (IS_ERR(cell)) {
                        ret = PTR_ERR(cell);
                        goto done;
index dfc109f48ad591ce45a0029a751c0523148135ee..aa6a3ccf39b59713d8144165899e932293fb7870 100644 (file)
@@ -290,7 +290,8 @@ static int afs_parse_source(struct fs_context *fc, struct fs_parameter *param)
        /* lookup the cell record */
        if (cellname) {
                cell = afs_lookup_cell(ctx->net, cellname, cellnamesz,
-                                      NULL, false);
+                                      NULL, false,
+                                      afs_cell_trace_use_lookup_mount);
                if (IS_ERR(cell)) {
                        pr_err("kAFS: unable to lookup cell '%*.*s'\n",
                               cellnamesz, cellnamesz, cellname ?: "");
index f9e76b604f31b9a3379b452327493706f81d58cc..ffcfba1725e6da4087d5ce7150fef539c0902fa5 100644 (file)
@@ -269,7 +269,8 @@ static int yfs_check_canonical_cell_name(struct afs_cell *cell, struct key *key)
        if (!name_len || name_len > AFS_MAXCELLNAME)
                master = ERR_PTR(-EOPNOTSUPP);
        else
-               master = afs_lookup_cell(cell->net, cell_name, name_len, NULL, false);
+               master = afs_lookup_cell(cell->net, cell_name, name_len, NULL, false,
+                                        afs_cell_trace_use_lookup_canonical);
        kfree(cell_name);
        if (IS_ERR(master))
                return PTR_ERR(master);
index 24d99fbc298f6cb1db9a62d85b674ffa90edb611..42c3a51db72b815583c43150f25ffe424db054fc 100644 (file)
@@ -208,7 +208,12 @@ enum yfs_cm_operation {
        EM(afs_cell_trace_use_check_alias,      "USE chk-al") \
        EM(afs_cell_trace_use_fc,               "USE fc    ") \
        EM(afs_cell_trace_use_fc_alias,         "USE fc-al ") \
-       EM(afs_cell_trace_use_lookup,           "USE lookup") \
+       EM(afs_cell_trace_use_lookup_add,       "USE lu-add") \
+       EM(afs_cell_trace_use_lookup_canonical, "USE lu-can") \
+       EM(afs_cell_trace_use_lookup_dynroot,   "USE lu-dyn") \
+       EM(afs_cell_trace_use_lookup_mntpt,     "USE lu-mpt") \
+       EM(afs_cell_trace_use_lookup_mount,     "USE lu-mnt") \
+       EM(afs_cell_trace_use_lookup_ws,        "USE lu-ws ") \
        EM(afs_cell_trace_use_mntpt,            "USE mntpt ") \
        EM(afs_cell_trace_use_pin,              "USE pin   ") \
        EM(afs_cell_trace_use_probe,            "USE probe ") \