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

Steve French smfrench at gmail.com
Thu Oct 16 18:40:28 GMT 2008


Merged - after cleaning up some long (>80) lines and adding an
fs/cifs/README entry

On Thu, Oct 16, 2008 at 11:23 AM, Q (Igor Mammedov) <niallain at gmail.com> wrote:
> On Thu, Oct 16, 2008 at 3:43 PM, 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?
>
> Acked.
>
>> --
>> Jeff Layton <jlayton at redhat.com>
>>
>



-- 
Thanks,

Steve


More information about the linux-cifs-client mailing list