Re: smb2 and shared superblock model

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Mar 28, 2011 at 1:50 PM, Pavel Shilovsky <piastryyy@xxxxxxxxx> wrote:
> 2011/3/26 Jeff Layton <jlayton@xxxxxxxxxx>:
>> On Sat, 26 Mar 2011 16:12:03 +0300
>> Pavel Shilovsky <piastryyy@xxxxxxxxx> wrote:
>>
>>> Hi!
>>>
>>> Today I investigated a bit about how to insert sharedblock model into
>>> cifs and get it work correctly with smb2.1 leases. Now we have the
>>> following archtecture:
>>> inode -> superblock -> tlink -> tcon -> sess -> srv - so we can
>>> definitely say what ses id and tree id we should use for a requested
>>> inode. It's from the one hand.
>>>
>>> From another hand, we should share cached data between several
>>> sessions from the same client (according to SMB2 spec we should have
>>> one global file table). And everything is good if we will share
>>> superblock between several mounts that uses the same sess id and tcon
>>> id. But if these are different sessions that's brings a problem. A
>>> superblock is linked to only one tcon id and sess id but we need to
>>> share it between completely different sessions. So, it seems to me
>>> that according to nowadays situation we can't share the same data
>>> between different sessions.
>>>
>>> So, now I suggest to share a superblock only between different mounts
>>> of the same sess id and tcon id. And every time we negotiate a
>>> different session (e.x. from another username) we should change
>>> ClientGUID. It causes the server to think that these are different
>>> clients and it won't grant leases on parallel opens from these
>>> sessions. So, in this case we solve data coherency problem but, of
>>> course, miss some advantages of SMB2 protocol.
>>>
>>> Your comments/thoughts?
>>>
>>
>> That's not quite correct...
>>
>> A superblock can point to more than one tcon in the multiuser mount
>> case. That's the whole reason for the tlink structure in the first
>> place.
>>
>> The reason for a shared superblock is that you intend to mount the
>> exact same data in multiple places and don't intend to bind mount. With
>> NFS for instance, consider the case where you do something like this:
>>
>>    # mount server:/export /mount1
>>    # mount server:/export/subdir /mount2
>>
>> Suppose then that you access these files:
>>
>>    /mount1/subdir/file1
>>    /mount2/file1
>>
>> Traditionally, that would give you two different inodes connected to
>> two different superblocks. Cache consistency can easily be off, you end
>> up with duplicate data in cache, and dealing with fscache is
>> problematic since you can end up with collisions in the cache.
>>
>> To fix that (mostly for the fscache problem), David Howells converted
>> NFS so that it would share superblocks in this situation. The two
>> vfsmounts point to the same superblock, but the root dentry is different
>> for each.
>>
>> So...what does this mean for CIFS? We already look for an existing
>> server, session and tcon when we mount. To do this for CIFS you would
>> simply need to go a step farther and look for an existing superblock
>> that matches your needs and deal with setting up the root dentry
>> correctly.
>>
>> I urge you to have a look at what NFS does in this case. It's
>> non-trivial but that is probably the best model for doing this in CIFS.
>>
>> Here's the catch though...you now have to deal with all of the CIFS
>> mount options and decide which settings mean that you need to create a
>> new superblock instead of using an existing one on a new mount.
>>
>> --
>> Jeff Layton <jlayton@xxxxxxxxxx>
>>
>
> So, I suggest to do the following - before we get a superblock we
> should figure out what structures we can share:
> 1) try to share tcp_sesion;
> 2) if succeed - try to share smb_session;
> 3) if succeed - try to share tcon;
> 4) if succeed - share a sb which tcon points to.
>
> So, in this case there is no need to use sget call with 'compare' and
> 'set' callbacks like NFS does it, I think.
>
> As for multiuser mode - It won't bring complexity because in this case
> we don't touch its code.

At a high level, your description above makes sense, but the
details can get tricky.  In practice some differences
in mount options etc. are not "disqualifying" when trying to
share a superblock or tcon but it we have to consider
the options one by one.


-- 
Thanks,

Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux