diff options
author | Steve French <sfrench@us.ibm.com> | 2007-07-15 01:48:57 +0000 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2007-07-15 01:48:57 +0000 |
commit | 2d785a50a8aa404c19f56d2c22445e48e418112b (patch) | |
tree | 260f7a1bf95126a8681d170e15337ff0ffad7e17 /fs/cifs/inode.c | |
parent | 50c2f75388727018c3c357454a247072915a9e3f (diff) | |
download | op-kernel-dev-2d785a50a8aa404c19f56d2c22445e48e418112b.zip op-kernel-dev-2d785a50a8aa404c19f56d2c22445e48e418112b.tar.gz |
[CIFS] Add support for new POSIX unlink
In the cleanup phase of the dbench test, we were noticing sharing
violation followed by failed directory removals when dbench
did not close the test files before the cleanup phase started.
Using the new POSIX unlink, which Samba has supported for a few
months, avoids this.
Signed-off-by: Steve French <sfrench@us.ibm.com>
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 a1ca556..cfa5b36 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c @@ -620,9 +620,21 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry) FreeXid(xid); return -ENOMEM; } - rc = CIFSSMBDelFile(xid, pTcon, full_path, cifs_sb->local_nls, + + if ((pTcon->ses->capabilities & CAP_UNIX) && + (CIFS_UNIX_POSIX_PATH_OPS_CAP & + le64_to_cpu(pTcon->fsUnixInfo.Capability))) { + rc = CIFSPOSIXDelFile(xid, pTcon, full_path, + SMB_POSIX_UNLINK_FILE_TARGET, cifs_sb->local_nls, cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); + cFYI(1, ("posix del rc %d", rc)); + if ((rc == 0) || (rc == -ENOENT)) + goto psx_del_no_retry; + } + rc = CIFSSMBDelFile(xid, pTcon, full_path, cifs_sb->local_nls, + cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); +psx_del_no_retry: if (!rc) { if (direntry->d_inode) drop_nlink(direntry->d_inode); |