--- /dev/null
+From ede4cebce16f5643c61aedd6d88d9070a1d23a68 Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Wed, 13 Nov 2013 07:45:40 -0500
+Subject: prepend_path() needs to reinitialize dentry/vfsmount/mnt on restarts
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit ede4cebce16f5643c61aedd6d88d9070a1d23a68 upstream.
+
+... and equivalent is needed in 3.12; it's broken there as well
+
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Reported-by: Michael Marineau <michael.marineau@coreos.com>
+Tested-by: Waiman Long <Waiman.Long@hp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/dcache.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -2881,9 +2881,9 @@ static int prepend_path(const struct pat
+ const struct path *root,
+ char **buffer, int *buflen)
+ {
+- struct dentry *dentry = path->dentry;
+- struct vfsmount *vfsmnt = path->mnt;
+- struct mount *mnt = real_mount(vfsmnt);
++ struct dentry *dentry;
++ struct vfsmount *vfsmnt;
++ struct mount *mnt;
+ int error = 0;
+ unsigned seq = 0;
+ char *bptr;
+@@ -2893,6 +2893,9 @@ static int prepend_path(const struct pat
+ restart:
+ bptr = *buffer;
+ blen = *buflen;
++ dentry = path->dentry;
++ vfsmnt = path->mnt;
++ mnt = real_mount(vfsmnt);
+ read_seqbegin_or_lock(&rename_lock, &seq);
+ while (dentry != root->dentry || vfsmnt != root->mnt) {
+ struct dentry * parent;