| From b911a6bdeef5848c468597d040e3407e0aee04ce Mon Sep 17 00:00:00 2001 |
| From: NeilBrown <neilb@suse.de> |
| Date: Thu, 8 Nov 2012 16:09:37 -0800 |
| Subject: vfs: d_obtain_alias() needs to use "/" as default name. |
| |
| From: NeilBrown <neilb@suse.de> |
| |
| commit b911a6bdeef5848c468597d040e3407e0aee04ce upstream. |
| |
| NFS appears to use d_obtain_alias() to create the root dentry rather than |
| d_make_root. This can cause 'prepend_path()' to complain that the root |
| has a weird name if an NFS filesystem is lazily unmounted. e.g. if |
| "/mnt" is an NFS mount then |
| |
| { cd /mnt; umount -l /mnt ; ls -l /proc/self/cwd; } |
| |
| will cause a WARN message like |
| WARNING: at /home/git/linux/fs/dcache.c:2624 prepend_path+0x1d7/0x1e0() |
| ... |
| Root dentry has weird name <> |
| |
| to appear in kernel logs. |
| |
| So change d_obtain_alias() to use "/" rather than "" as the anonymous |
| name. |
| |
| Signed-off-by: NeilBrown <neilb@suse.de> |
| Cc: Trond Myklebust <Trond.Myklebust@netapp.com> |
| Cc: Al Viro <viro@zeniv.linux.org.uk> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/dcache.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/dcache.c |
| +++ b/fs/dcache.c |
| @@ -1583,7 +1583,7 @@ EXPORT_SYMBOL(d_find_any_alias); |
| */ |
| struct dentry *d_obtain_alias(struct inode *inode) |
| { |
| - static const struct qstr anonstring = { .name = "" }; |
| + static const struct qstr anonstring = QSTR_INIT("/", 1); |
| struct dentry *tmp; |
| struct dentry *res; |
| |