History

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.

Steve French committed 12 years ago

Commit 19e81571 parent 50dddff2 files · +3 −1Browse files

Unified · Split

2 files
  1. fs/cifs/smb1ops.c +1 −1
  2. fs/cifs/smb2maperror.c +2 −0
fs/cifs/smb1ops.c+1−1
@@ -586,7 +586,7 @@ cifs_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, · 585 unmodified lines
586586 tmprc = CIFS_open(xid, &oparms, &oplock, NULL);
587587 if (tmprc == -EOPNOTSUPP)
588588 *symlink = true;
589− else
589+ else if (tmprc == 0)
590590 CIFSSMBClose(xid, tcon, fid.netfid);
591591 }
592592
fs/cifs/smb2maperror.c+2−0
@@ -256,6 +256,8 @@ static const struct status_to_posix_error smb2_error_map_table[] = { · 255 unmodified lines
256256 {STATUS_DLL_MIGHT_BE_INCOMPATIBLE, -EIO,
257257 "STATUS_DLL_MIGHT_BE_INCOMPATIBLE"},
258258 {STATUS_STOPPED_ON_SYMLINK, -EOPNOTSUPP, "STATUS_STOPPED_ON_SYMLINK"},
259+ {STATUS_IO_REPARSE_TAG_NOT_HANDLED, -EOPNOTSUPP,
260+ "STATUS_REPARSE_NOT_HANDLED"},
259261 {STATUS_DEVICE_REQUIRES_CLEANING, -EIO,
260262 "STATUS_DEVICE_REQUIRES_CLEANING"},
261263 {STATUS_DEVICE_DOOR_OPEN, -EIO, "STATUS_DEVICE_DOOR_OPEN"},

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t