Commit f012edf688f867dc35a3501808afc6fa9fba640d

Authored by Steve French
Committed by Greg Kroah-Hartman
1 parent 7365af4980

Fix problem recognizing symlinks

commit 19e81573fca7b87ced7701e01ba164b968d929bd upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 2 changed files with 3 additions and 1 deletions Side-by-side Diff

... ... @@ -586,7 +586,7 @@
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  
fs/cifs/smb2maperror.c
... ... @@ -256,6 +256,8 @@
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"},