Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kernfs: implement kernfs_path_len()

Add a function to determine the path length of a kernfs node. This
for now will be used by writeback tracepoint updates.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Jens Axboe <axboe@fb.com>

authored by

Tejun Heo and committed by
Jens Axboe
9acee9c5 60292bcc

+27
+23
fs/kernfs/dir.c
··· 92 92 } 93 93 94 94 /** 95 + * kernfs_path_len - determine the length of the full path of a given node 96 + * @kn: kernfs_node of interest 97 + * 98 + * The returned length doesn't include the space for the terminating '\0'. 99 + */ 100 + size_t kernfs_path_len(struct kernfs_node *kn) 101 + { 102 + size_t len = 0; 103 + unsigned long flags; 104 + 105 + spin_lock_irqsave(&kernfs_rename_lock, flags); 106 + 107 + do { 108 + len += strlen(kn->name) + 1; 109 + kn = kn->parent; 110 + } while (kn && kn->parent); 111 + 112 + spin_unlock_irqrestore(&kernfs_rename_lock, flags); 113 + 114 + return len; 115 + } 116 + 117 + /** 95 118 * kernfs_path - build full path of a given node 96 119 * @kn: kernfs_node of interest 97 120 * @buf: buffer to copy @kn's name into
+4
include/linux/kernfs.h
··· 266 266 } 267 267 268 268 int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen); 269 + size_t kernfs_path_len(struct kernfs_node *kn); 269 270 char * __must_check kernfs_path(struct kernfs_node *kn, char *buf, 270 271 size_t buflen); 271 272 void pr_cont_kernfs_name(struct kernfs_node *kn); ··· 332 331 333 332 static inline int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen) 334 333 { return -ENOSYS; } 334 + 335 + static inline size_t kernfs_path_len(struct kernfs_node *kn) 336 + { return 0; } 335 337 336 338 static inline char * __must_check kernfs_path(struct kernfs_node *kn, char *buf, 337 339 size_t buflen)