| From 247db73560bc3e5aef6db50c443c3c0db115bc93 Mon Sep 17 00:00:00 2001 |
| From: Ashish Sangwan <ashishsangwan2@gmail.com> |
| Date: Mon, 5 Oct 2020 02:22:43 -0700 |
| Subject: NFS: fix nfs_path in case of a rename retry |
| |
| From: Ashish Sangwan <ashishsangwan2@gmail.com> |
| |
| commit 247db73560bc3e5aef6db50c443c3c0db115bc93 upstream. |
| |
| We are generating incorrect path in case of rename retry because |
| we are restarting from wrong dentry. We should restart from the |
| dentry which was received in the call to nfs_path. |
| |
| CC: stable@vger.kernel.org |
| Signed-off-by: Ashish Sangwan <ashishsangwan2@gmail.com> |
| Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfs/namespace.c | 12 ++++++++---- |
| 1 file changed, 8 insertions(+), 4 deletions(-) |
| |
| --- a/fs/nfs/namespace.c |
| +++ b/fs/nfs/namespace.c |
| @@ -32,9 +32,9 @@ int nfs_mountpoint_expiry_timeout = 500 |
| /* |
| * nfs_path - reconstruct the path given an arbitrary dentry |
| * @base - used to return pointer to the end of devname part of path |
| - * @dentry - pointer to dentry |
| + * @dentry_in - pointer to dentry |
| * @buffer - result buffer |
| - * @buflen - length of buffer |
| + * @buflen_in - length of buffer |
| * @flags - options (see below) |
| * |
| * Helper function for constructing the server pathname |
| @@ -49,15 +49,19 @@ int nfs_mountpoint_expiry_timeout = 500 |
| * the original device (export) name |
| * (if unset, the original name is returned verbatim) |
| */ |
| -char *nfs_path(char **p, struct dentry *dentry, char *buffer, ssize_t buflen, |
| - unsigned flags) |
| +char *nfs_path(char **p, struct dentry *dentry_in, char *buffer, |
| + ssize_t buflen_in, unsigned flags) |
| { |
| char *end; |
| int namelen; |
| unsigned seq; |
| const char *base; |
| + struct dentry *dentry; |
| + ssize_t buflen; |
| |
| rename_retry: |
| + buflen = buflen_in; |
| + dentry = dentry_in; |
| end = buffer+buflen; |
| *--end = '\0'; |
| buflen--; |