mirror of https://gitee.com/openkylin/linux.git
cifs: map NT_STATUS_SHARING_VIOLATION to EBUSY instead of ETXTBSY
NT_SHARING_VIOLATION errors are mapped to ETXTBSY which is unexpected for operations such as unlink where we can hit these errors. The patch maps the error NT_SHARING_VIOLATION to EBUSY instead. The patch also replaces all instances of ETXTBSY in cifs_rename_pending_delete() with EBUSY. Signed-off-by: Sachin Prabhu <sprabhu@redhat.com> Reviewed-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
6c23cbbd50
commit
47c78f4a70
|
@ -1043,7 +1043,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
|
|||
cifs_sb->mnt_cifs_flags &
|
||||
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||
if (rc != 0) {
|
||||
rc = -ETXTBSY;
|
||||
rc = -EBUSY;
|
||||
goto undo_setattr;
|
||||
}
|
||||
|
||||
|
@ -1062,7 +1062,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
|
|||
if (rc == -ENOENT)
|
||||
rc = 0;
|
||||
else if (rc != 0) {
|
||||
rc = -ETXTBSY;
|
||||
rc = -EBUSY;
|
||||
goto undo_rename;
|
||||
}
|
||||
cifsInode->delete_pending = true;
|
||||
|
@ -1169,15 +1169,13 @@ int cifs_unlink(struct inode *dir, struct dentry *dentry)
|
|||
cifs_drop_nlink(inode);
|
||||
} else if (rc == -ENOENT) {
|
||||
d_drop(dentry);
|
||||
} else if (rc == -ETXTBSY) {
|
||||
} else if (rc == -EBUSY) {
|
||||
if (server->ops->rename_pending_delete) {
|
||||
rc = server->ops->rename_pending_delete(full_path,
|
||||
dentry, xid);
|
||||
if (rc == 0)
|
||||
cifs_drop_nlink(inode);
|
||||
}
|
||||
if (rc == -ETXTBSY)
|
||||
rc = -EBUSY;
|
||||
} else if ((rc == -EACCES) && (dosattr == 0) && inode) {
|
||||
attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);
|
||||
if (attrs == NULL) {
|
||||
|
@ -1518,7 +1516,7 @@ cifs_do_rename(const unsigned int xid, struct dentry *from_dentry,
|
|||
* source. Note that cross directory moves do not work with
|
||||
* rename by filehandle to various Windows servers.
|
||||
*/
|
||||
if (rc == 0 || rc != -ETXTBSY)
|
||||
if (rc == 0 || rc != -EBUSY)
|
||||
goto do_rename_exit;
|
||||
|
||||
/* open-file renames don't work across directories */
|
||||
|
|
|
@ -62,7 +62,7 @@ static const struct smb_to_posix_error mapping_table_ERRDOS[] = {
|
|||
{ERRdiffdevice, -EXDEV},
|
||||
{ERRnofiles, -ENOENT},
|
||||
{ERRwriteprot, -EROFS},
|
||||
{ERRbadshare, -ETXTBSY},
|
||||
{ERRbadshare, -EBUSY},
|
||||
{ERRlock, -EACCES},
|
||||
{ERRunsup, -EINVAL},
|
||||
{ERRnosuchshare, -ENXIO},
|
||||
|
|
Loading…
Reference in New Issue