diff options
Diffstat (limited to 'fs/cifs/inode.c')
-rw-r--r-- | fs/cifs/inode.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index a1ca55650505..cfa5b360d12e 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -620,9 +620,21 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry) | |||
620 | FreeXid(xid); | 620 | FreeXid(xid); |
621 | return -ENOMEM; | 621 | return -ENOMEM; |
622 | } | 622 | } |
623 | rc = CIFSSMBDelFile(xid, pTcon, full_path, cifs_sb->local_nls, | 623 | |
624 | if ((pTcon->ses->capabilities & CAP_UNIX) && | ||
625 | (CIFS_UNIX_POSIX_PATH_OPS_CAP & | ||
626 | le64_to_cpu(pTcon->fsUnixInfo.Capability))) { | ||
627 | rc = CIFSPOSIXDelFile(xid, pTcon, full_path, | ||
628 | SMB_POSIX_UNLINK_FILE_TARGET, cifs_sb->local_nls, | ||
624 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | 629 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); |
630 | cFYI(1, ("posix del rc %d", rc)); | ||
631 | if ((rc == 0) || (rc == -ENOENT)) | ||
632 | goto psx_del_no_retry; | ||
633 | } | ||
625 | 634 | ||
635 | rc = CIFSSMBDelFile(xid, pTcon, full_path, cifs_sb->local_nls, | ||
636 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
637 | psx_del_no_retry: | ||
626 | if (!rc) { | 638 | if (!rc) { |
627 | if (direntry->d_inode) | 639 | if (direntry->d_inode) |
628 | drop_nlink(direntry->d_inode); | 640 | drop_nlink(direntry->d_inode); |