Fix problem recognizing symlinks

Changeset eb85d94bd introduced a problem where if a cifs open
fails during query info of a file we
will still try to close the file (happens with certain types
of reparse points) even though the file handle is not valid.

In addition for SMB2/SMB3 we were not mapping the return code returned
by Windows when trying to open a file (like a Windows NFS symlink)
which is a reparse point.

Signed-off-by: Steve French <smfrench@gmail.com>
Reviewed-by: Pavel Shilovsky <pshilovsky@samba.org>
CC: stable <stable@vger.kernel.org> #v3.13+

Changed files
+3 -1
fs
+1 -1
fs/cifs/smb1ops.c
··· 586 586 tmprc = CIFS_open(xid, &oparms, &oplock, NULL); 587 587 if (tmprc == -EOPNOTSUPP) 588 588 *symlink = true; 589 - else 589 + else if (tmprc == 0) 590 590 CIFSSMBClose(xid, tcon, fid.netfid); 591 591 } 592 592
+2
fs/cifs/smb2maperror.c
··· 256 256 {STATUS_DLL_MIGHT_BE_INCOMPATIBLE, -EIO, 257 257 "STATUS_DLL_MIGHT_BE_INCOMPATIBLE"}, 258 258 {STATUS_STOPPED_ON_SYMLINK, -EOPNOTSUPP, "STATUS_STOPPED_ON_SYMLINK"}, 259 + {STATUS_IO_REPARSE_TAG_NOT_HANDLED, -EOPNOTSUPP, 260 + "STATUS_REPARSE_NOT_HANDLED"}, 259 261 {STATUS_DEVICE_REQUIRES_CLEANING, -EIO, 260 262 "STATUS_DEVICE_REQUIRES_CLEANING"}, 261 263 {STATUS_DEVICE_DOOR_OPEN, -EIO, "STATUS_DEVICE_DOOR_OPEN"},