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

Steve French smfrench at gmail.com
Thu Oct 16 13:41:40 GMT 2008


Sounds reasonable to me - I will queue it up or something similar
unless there are any objections.

On Thu, Oct 16, 2008 at 6:43 AM, Jeff Layton <jlayton at redhat.com> wrote:
> 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>
>



-- 
Thanks,

Steve


More information about the linux-cifs-client mailing list