[linux-cifs-client] Re: [PATCH] CIFS: Add nodfs mount option

Jeff Layton jlayton at redhat.com
Thu Oct 16 11:43:05 GMT 2008


On Thu, 16 Oct 2008 08:17:43 +0200
Martin Koegler <mkoegler at auto.tuwien.ac.at> wrote:

> Older samba server (eg. 3.0.24 from Debian etch) don't work correctly,
> if DFS paths are used. Such server claim that they support DFS, but fail
> to process some requests with DFS paths. Starting with Linux 2.6.26,
> the cifs clients starts sending DFS paths in such situations, rendering
> it unuseable with older samba servers.
> 
> The nodfs mount options forces a share to be used with non DFS paths,
> even if the server claims, that it supports it.
> 
> Signed-off-by: Martin Koegler <mkoegler at auto.tuwien.ac.at>
> ---
> 
> This patch makes my home directory on a samba server useable for Linux 2.6.26
> again. It still needs more testing. Should apply to linux 2.6.27 too.
> 
> Would it be possible to support something like this in the offical CIFS client?
> 
> diff a/fs/cifs/connect.c b/fs/cifs/connect.c
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -90,6 +90,7 @@ struct smb_vol {
>  	bool nocase:1;     /* request case insensitive filenames */
>  	bool nobrl:1;      /* disable sending byte range locks to srv */
>  	bool seal:1;       /* request transport encryption on share */
> +	bool nodfs:1;
>  	unsigned int rsize;
>  	unsigned int wsize;
>  	unsigned int sockopt;
> @@ -1223,6 +1224,8 @@ cifs_parse_mount_options(char *options, 
>  			vol->sfu_emul = 1;
>  		} else if (strnicmp(data, "nosfu", 5) == 0) {
>  			vol->sfu_emul = 0;
> +		} else if (strnicmp(data, "nodfs", 5) == 0) {
> +			vol->nodfs = 1;
>  		} else if (strnicmp(data, "posixpaths", 10) == 0) {
>  			vol->posix_paths = 1;
>  		} else if (strnicmp(data, "noposixpaths", 12) == 0) {
> @@ -2167,6 +2170,10 @@ cifs_mount(struct super_block *sb, struc
>  						volume_info.UNC,
>  						tcon, cifs_sb->local_nls);
>  					cFYI(1, ("CIFS Tcon rc = %d", rc));
> +					if (volume_info.nodfs) {
> +						tcon->Flags &= ~SMB_SHARE_IS_IN_DFS;
> +						cFYI(1, ("CIFS DFS disabeld (%d)", tcon->Flags));
> +					}
>  				}
>  				if (!rc) {
>  					atomic_inc(&pSesInfo->inUse);
> --


Looks reasonable to me. Igor did most of the DFS work, so I cc'ed him
here. Igor, any thoughts?

-- 
Jeff Layton <jlayton at redhat.com>


More information about the linux-cifs-client mailing list