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>
This commit is contained in:
parent
60292bcc1b
commit
9acee9c551
2 changed files with 27 additions and 0 deletions
|
@ -91,6 +91,29 @@ int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kernfs_path_len - determine the length of the full path of a given node
|
||||||
|
* @kn: kernfs_node of interest
|
||||||
|
*
|
||||||
|
* The returned length doesn't include the space for the terminating '\0'.
|
||||||
|
*/
|
||||||
|
size_t kernfs_path_len(struct kernfs_node *kn)
|
||||||
|
{
|
||||||
|
size_t len = 0;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&kernfs_rename_lock, flags);
|
||||||
|
|
||||||
|
do {
|
||||||
|
len += strlen(kn->name) + 1;
|
||||||
|
kn = kn->parent;
|
||||||
|
} while (kn && kn->parent);
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&kernfs_rename_lock, flags);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* kernfs_path - build full path of a given node
|
* kernfs_path - build full path of a given node
|
||||||
* @kn: kernfs_node of interest
|
* @kn: kernfs_node of interest
|
||||||
|
|
|
@ -266,6 +266,7 @@ static inline bool kernfs_ns_enabled(struct kernfs_node *kn)
|
||||||
}
|
}
|
||||||
|
|
||||||
int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen);
|
int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen);
|
||||||
|
size_t kernfs_path_len(struct kernfs_node *kn);
|
||||||
char * __must_check kernfs_path(struct kernfs_node *kn, char *buf,
|
char * __must_check kernfs_path(struct kernfs_node *kn, char *buf,
|
||||||
size_t buflen);
|
size_t buflen);
|
||||||
void pr_cont_kernfs_name(struct kernfs_node *kn);
|
void pr_cont_kernfs_name(struct kernfs_node *kn);
|
||||||
|
@ -332,6 +333,9 @@ static inline bool kernfs_ns_enabled(struct kernfs_node *kn)
|
||||||
static inline int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen)
|
static inline int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen)
|
||||||
{ return -ENOSYS; }
|
{ return -ENOSYS; }
|
||||||
|
|
||||||
|
static inline size_t kernfs_path_len(struct kernfs_node *kn)
|
||||||
|
{ return 0; }
|
||||||
|
|
||||||
static inline char * __must_check kernfs_path(struct kernfs_node *kn, char *buf,
|
static inline char * __must_check kernfs_path(struct kernfs_node *kn, char *buf,
|
||||||
size_t buflen)
|
size_t buflen)
|
||||||
{ return NULL; }
|
{ return NULL; }
|
||||||
|
|
Loading…
Add table
Reference in a new issue