Re: PATCH] cifs: fix broken mounts when a SSH tunnel is used (try #4)
Jeff Layton <[email protected]>
| Newsgroups | gmane.linux.file-systems.cifs |
|---|---|
| Message-ID | <[email protected]> |
On Thu, 20 Aug 2009 13:03:34 +0530 Suresh Jayaraman <[email protected]> wrote: > One more try.. > > It seems there is a regression that got introduced while Jeff fixed > all the mount/umount races. While attempting to find whether a tcp > session is already existing, we were not checking whether the "port" > used are the same. When a second mount is attempted with a different > "port=" option, it is being ignored. Because of this the cifs mounts > that uses a SSH tunnel appears to be broken. > > Steps to reproduce: > > 1. create 2 shares > # SSH Tunnel a SMB session > 2. ssh -f -L 6111:127.0.0.1:445 root@localhost "sleep 86400" > 3. ssh -f -L 6222:127.0.0.1:445 root@localhost "sleep 86400" > 4. tcpdump -i lo 6111 & > 5. mkdir -p /mnt/mnt1 > 6. mkdir -p /mnt/mnt2 > 7. mount.cifs //localhost/a /mnt/mnt1 -o username=guest,ip=127.0.0.1,port=6111 > #(shows tcpdump activity on port 6111) > 8. mount.cifs //localhost/b /mnt/mnt2 -o username=guest,ip=127.0.0.1,port=6222 > #(shows tcpdump activity only on port 6111 and not on 6222 > > Fix by adding a check to compare the port _only_ if the user tries to > override the tcp port with "port=" option, before deciding that an > existing tcp session is found. Also, clean up a bit by replacing > if-else if by a switch statment while at it as suggested by Jeff. > > Signed-off-by: Suresh Jayaraman <[email protected]> > --- > Still a little more nested that I would have preferred... I'd have probably had it do this for each family: if (addrs don't match) continue; if (ports don't match) continue break; ...but that's a rather minor point. Acked-by: Jeff Layton <[email protected]>