[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