diff mbox

[v2] nfs: remove redundant slash from nfs_path

Message ID 1859750321.23735105.1408945864304.JavaMail.zimbra@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Murphy Zhou Aug. 25, 2014, 5:51 a.m. UTC
When export root dir(/) via nfs, and mount a particular dir under root, eg
/nfsexport, there will be defect double slash output in /proc/mounts, like
localhost://nfsexport. While this patch change it to localhost:/nfsexport.

Signed-off-by: Xiong Zhou <xzhou@redhat.com>
---
 fs/nfs/namespace.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ben Hutchings Aug. 25, 2014, 9:07 p.m. UTC | #1
On Mon, 2014-08-25 at 01:51 -0400, Xiong Zhou wrote:
> When export root dir(/) via nfs, and mount a particular dir under root, eg
> /nfsexport, there will be defect double slash output in /proc/mounts, like
> localhost://nfsexport. While this patch change it to localhost:/nfsexport.
> 
> Signed-off-by: Xiong Zhou <xzhou@redhat.com>
> ---
>  fs/nfs/namespace.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c
> index b5a0afc..24f954e 100644
> --- a/fs/nfs/namespace.c
> +++ b/fs/nfs/namespace.c
> @@ -98,7 +98,7 @@ rename_retry:
>  		return end;
>  	}
>  	namelen = strlen(base);
> -	if (flags & NFS_PATH_CANONICAL) {
> +	if ((flags & NFS_PATH_CANONICAL) || *end == '/') {
>  		/* Strip off excess slashes in base string */
>  		while (namelen > 0 && base[namelen - 1] == '/')
>  			namelen--;

I think this makes sense, though I'm not sure I completely understand
this function. :-/

Ben.
Trond Myklebust Aug. 25, 2014, 9:17 p.m. UTC | #2
On Mon, Aug 25, 2014 at 5:07 PM, Ben Hutchings <ben@decadent.org.uk> wrote:
> On Mon, 2014-08-25 at 01:51 -0400, Xiong Zhou wrote:
>> When export root dir(/) via nfs, and mount a particular dir under root, eg
>> /nfsexport, there will be defect double slash output in /proc/mounts, like
>> localhost://nfsexport. While this patch change it to localhost:/nfsexport.
>>
>> Signed-off-by: Xiong Zhou <xzhou@redhat.com>
>> ---
>>  fs/nfs/namespace.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c
>> index b5a0afc..24f954e 100644
>> --- a/fs/nfs/namespace.c
>> +++ b/fs/nfs/namespace.c
>> @@ -98,7 +98,7 @@ rename_retry:
>>               return end;
>>       }
>>       namelen = strlen(base);
>> -     if (flags & NFS_PATH_CANONICAL) {
>> +     if ((flags & NFS_PATH_CANONICAL) || *end == '/') {
>>               /* Strip off excess slashes in base string */
>>               while (namelen > 0 && base[namelen - 1] == '/')
>>                       namelen--;
>
> I think this makes sense, though I'm not sure I completely understand
> this function. :-/
>

It breaks the function's guarantee concerning NFS_PATH_CANONICAL; that
"if unset, the original name is returned verbatim".
diff mbox

Patch

diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c
index b5a0afc..24f954e 100644
--- a/fs/nfs/namespace.c
+++ b/fs/nfs/namespace.c
@@ -98,7 +98,7 @@  rename_retry:
 		return end;
 	}
 	namelen = strlen(base);
-	if (flags & NFS_PATH_CANONICAL) {
+	if ((flags & NFS_PATH_CANONICAL) || *end == '/') {
 		/* Strip off excess slashes in base string */
 		while (namelen > 0 && base[namelen - 1] == '/')
 			namelen--;