On Wed, 18 Sep 2013 07:42:09 -0700 Volker Lendecke <Volker.Lendecke@xxxxxxxxx> wrote: > On Mon, Sep 16, 2013 at 11:23:45AM -0400, Jeff Layton wrote: > > Currently, we try to ensure that we use vcnum of 0 on the first > > established session on a connection and then try to use a different > > vcnum on each session after that. > > > > This is a little odd, since there's no real reason to use a different > > vcnum for each SMB session. I can only assume there was some confusion > > between SMB sessions and VCs. That's somewhat understandable since they > > both get created during SESSION_SETUP, but the documentation indicates > > that they are really orthogonal. The comment on max_vcs in particular > > looks quite misguided. An SMB session is already uniquely identified > > by the SMB UID value -- there's no need to again uniquely ID with a > > VC. > > > > Furthermore, a vcnum of 0 is a cue to the server that it should release > > any resources that were previously held by the client. This sounds like > > a good thing, until you consider that: > > > > a) it totally ignores the fact that other programs on the box (e.g. > > smbclient) might have connections established to the server. Using a > > vcnum of 0 causes them to get kicked off. > > > > b) it causes problems with NAT. If several clients are connected to the > > same server via the same NAT'ed address, whenever one connects to the > > server it kicks off all the others, which then reconnect and kick off > > the first one...ad nauseum. > > > > I don't see any reason to ignore the advice in "Implementing CIFS" which > > has a comprehensive treatment of virtual circuits. In there, it states > > "...and contrary to the specs the client should always use a VcNumber of > > one, never zero." > > > > Have the client just use a hardcoded vcnum of 1, and stop abusing the > > special behavior of vcnum 0. > > It's kindof a tough choice, but I like this patch. It does > solve real problems. The downside certainly is that we have > worse cleanup behaviour of dead connections, but I would > prefer not killing NATed connections. > > Volker > Agreed, but I'm not convinced that there's really a downside. We don't currently use share modes, so that shouldn't be an issue. Pavel's patchset may eventually change that, but I don't see it happening anytime too soon. My initial thinking was that we might end up not getting an oplock on a reconnect when we held one before. OTOH, one would think that if the client was reclaiming the open file, the server would try to issue an oplock break on the previous connection. At that point, it should find that it's dead anyway, so that also shouldn't be an issue. Implementing CIFS clearly states that VC handling by servers is spotty at best, so I think we're best off avoiding any use of them. In principle, we could add a knob that tells the server to use vcnum==0 on the first session to allow it to opt-in to this behavior, but I'd prefer not to do that until someone demonstrates a clear need for it so we can understand how best to implement it. If we did need to do that, there's clearly no need to use a different vcnum on every session. Simply using vcnum==0 on the first one and then vcnum==1 on every subsequent one would be sufficient. -- Jeff Layton <jlayton@xxxxxxxxxx> -- 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