Improve the cachefiles_lookup tracepoint:

 - Don't display the dentry address, since it's going to get hashed.

 - Do display any error code.

 - Work out the inode in the tracepoint rather than in the caller so that
   the logic is conditional on the tracepoint being enabled.

Signed-off-by: David Howells <dhowe...@redhat.com>
---

 fs/cachefiles/namei.c             |    4 +---
 include/trace/events/cachefiles.h |   18 +++++++++---------
 2 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
index 10b6d571eda8..b5a0aec529af 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -340,14 +340,12 @@ static int cachefiles_walk_to_file(struct 
cachefiles_cache *cache,
        inode_lock_nested(dinode, I_MUTEX_PARENT);
 
        dentry = lookup_one_len(object->d_name, fan, object->d_name_len);
+       trace_cachefiles_lookup(object, dentry);
        if (IS_ERR(dentry)) {
-               trace_cachefiles_lookup(object, dentry, NULL);
                ret = PTR_ERR(dentry);
                goto error;
        }
 
-       trace_cachefiles_lookup(object, dentry, d_backing_inode(dentry));
-
        if (d_is_negative(dentry)) {
                /* This element of the path doesn't exist, so we can release
                 * any readers in the certain knowledge that there's nothing
diff --git a/include/trace/events/cachefiles.h 
b/include/trace/events/cachefiles.h
index bd0b5bbd3889..87681dd957ec 100644
--- a/include/trace/events/cachefiles.h
+++ b/include/trace/events/cachefiles.h
@@ -98,25 +98,25 @@ TRACE_EVENT(cachefiles_ref,
 
 TRACE_EVENT(cachefiles_lookup,
            TP_PROTO(struct cachefiles_object *obj,
-                    struct dentry *de,
-                    struct inode *inode),
+                    struct dentry *de),
 
-           TP_ARGS(obj, de, inode),
+           TP_ARGS(obj, de),
 
            TP_STRUCT__entry(
                    __field(unsigned int,               obj     )
-                   __field(struct dentry *,            de      )
-                   __field(struct inode *,             inode   )
+                   __field(short,                      error   )
+                   __field(unsigned long,              ino     )
                             ),
 
            TP_fast_assign(
                    __entry->obj        = obj->fscache.debug_id;
-                   __entry->de         = de;
-                   __entry->inode      = inode;
+                   __entry->ino        = (!IS_ERR(de) && d_backing_inode(de) ?
+                                          d_backing_inode(de)->i_ino : 0);
+                   __entry->error      = IS_ERR(de) ? PTR_ERR(de) : 0;
                           ),
 
-           TP_printk("o=%08x d=%p i=%p",
-                     __entry->obj, __entry->de, __entry->inode)
+           TP_printk("o=%08x i=%lx e=%d",
+                     __entry->obj, __entry->ino, __entry->error)
            );
 
 TRACE_EVENT(cachefiles_create,


--
Linux-cachefs mailing list
Linux-cachefs@redhat.com
https://listman.redhat.com/mailman/listinfo/linux-cachefs

Reply via email to