Commit da9090a2 authored by Pavel Shilovsky's avatar Pavel Shilovsky

Fix STATUS_SHARING_VIOLATION error mapping for 3.9

parent f763d5fe
...@@ -1049,7 +1049,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry, ...@@ -1049,7 +1049,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
cifs_sb->mnt_cifs_flags & cifs_sb->mnt_cifs_flags &
CIFS_MOUNT_MAP_SPECIAL_CHR); CIFS_MOUNT_MAP_SPECIAL_CHR);
if (rc != 0) { if (rc != 0) {
rc = -EBUSY; rc = -ETXTBSY;
goto undo_setattr; goto undo_setattr;
} }
...@@ -1068,7 +1068,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry, ...@@ -1068,7 +1068,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
if (rc == -ENOENT) if (rc == -ENOENT)
rc = 0; rc = 0;
else if (rc != 0) { else if (rc != 0) {
rc = -EBUSY; rc = -ETXTBSY;
goto undo_rename; goto undo_rename;
} }
cifsInode->delete_pending = true; cifsInode->delete_pending = true;
...@@ -1175,13 +1175,15 @@ psx_del_no_retry: ...@@ -1175,13 +1175,15 @@ psx_del_no_retry:
cifs_drop_nlink(inode); cifs_drop_nlink(inode);
} else if (rc == -ENOENT) { } else if (rc == -ENOENT) {
d_drop(dentry); d_drop(dentry);
} else if (rc == -EBUSY) { } else if (rc == -ETXTBSY) {
if (server->ops->rename_pending_delete) { if (server->ops->rename_pending_delete) {
rc = server->ops->rename_pending_delete(full_path, rc = server->ops->rename_pending_delete(full_path,
dentry, xid); dentry, xid);
if (rc == 0) if (rc == 0)
cifs_drop_nlink(inode); cifs_drop_nlink(inode);
} }
if (rc == -ETXTBSY)
rc = -EBUSY;
} else if ((rc == -EACCES) && (dosattr == 0) && inode) { } else if ((rc == -EACCES) && (dosattr == 0) && inode) {
attrs = kzalloc(sizeof(*attrs), GFP_KERNEL); attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);
if (attrs == NULL) { if (attrs == NULL) {
...@@ -1522,7 +1524,7 @@ cifs_do_rename(const unsigned int xid, struct dentry *from_dentry, ...@@ -1522,7 +1524,7 @@ cifs_do_rename(const unsigned int xid, struct dentry *from_dentry,
* source. Note that cross directory moves do not work with * source. Note that cross directory moves do not work with
* rename by filehandle to various Windows servers. * rename by filehandle to various Windows servers.
*/ */
if (rc == 0 || rc != -EBUSY) if (rc == 0 || rc != -ETXTBSY)
goto do_rename_exit; goto do_rename_exit;
/* open-file renames don't work across directories */ /* open-file renames don't work across directories */
......
...@@ -62,7 +62,7 @@ static const struct smb_to_posix_error mapping_table_ERRDOS[] = { ...@@ -62,7 +62,7 @@ static const struct smb_to_posix_error mapping_table_ERRDOS[] = {
{ERRdiffdevice, -EXDEV}, {ERRdiffdevice, -EXDEV},
{ERRnofiles, -ENOENT}, {ERRnofiles, -ENOENT},
{ERRwriteprot, -EROFS}, {ERRwriteprot, -EROFS},
{ERRbadshare, -EBUSY}, {ERRbadshare, -ETXTBSY},
{ERRlock, -EACCES}, {ERRlock, -EACCES},
{ERRunsup, -EINVAL}, {ERRunsup, -EINVAL},
{ERRnosuchshare, -ENXIO}, {ERRnosuchshare, -ENXIO},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment