Hello, Serge.
On Tue, Dec 22, 2015 at 10:23:22PM -0600, serge.hallyn-GeWIH/nMZzLQT0dZR+AlfA@public.gmane.org wrote:
quoted hunk ↗ jump to hunk
@@ -164,18 +286,39 @@ void pr_cont_kernfs_name(struct kernfs_node *kn)
void pr_cont_kernfs_path(struct kernfs_node *kn)
{
unsigned long flags;
- char *p;
+ char *p = NULL;
+ int sz1, sz2;
spin_lock_irqsave(&kernfs_rename_lock, flags);
- p = kernfs_path_locked(kn, kernfs_pr_cont_buf,
- sizeof(kernfs_pr_cont_buf));
- if (p)
- pr_cont("%s", p);
- else
- pr_cont("<name too long>");
+ sz1 = kernfs_path_from_node_locked(kn, NULL, kernfs_pr_cont_buf,
+ sizeof(kernfs_pr_cont_buf));
+ if (sz1 < 0) {
+ pr_cont("(error)");
+ goto out;
+ }
+
+ if (sz1 < sizeof(kernfs_pr_cont_buf)) {
+ pr_cont("%s", kernfs_pr_cont_buf);
+ goto out;
+ }
+
+ p = kmalloc(sz1 + 1, GFP_NOFS);
We can't do GFP_NOFS allocation while holding a spinlock and we don't
want to do atomic allocation here either. I think it'd be best to
keep using the static buffer.
Thanks.
--
tejun