diff options
author | Steve French <sfrench@us.ibm.com> | 2006-11-25 22:14:02 +0100 |
---|---|---|
committer | Adrian Bunk <bunk@stusta.de> | 2006-11-25 22:14:02 +0100 |
commit | 0d2da2ad7d48b4f7d0a1352d23a6826fe9a48468 (patch) | |
tree | a34cb77775a1e8ac607750c88778c6f6a3524176 /fs | |
parent | 74fe77b76999fb30335e5b338e43f71deb53fc15 (diff) | |
download | linux-stable-0d2da2ad7d48b4f7d0a1352d23a6826fe9a48468.tar.gz linux-stable-0d2da2ad7d48b4f7d0a1352d23a6826fe9a48468.tar.bz2 linux-stable-0d2da2ad7d48b4f7d0a1352d23a6826fe9a48468.zip |
CIFS: report rename failure when target file is locked by Windows
Fixes Samba bugzilla bug # 4182
Rename by handle failures (retry after rename by path) were not
being returned back.
Signed-off-by: Steve French <sfrench@us.ibm.com>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/cifs/inode.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 4542645778cd..f94b411f78b8 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c @@ -883,10 +883,14 @@ int cifs_rename(struct inode *source_inode, struct dentry *source_direntry, kmalloc(2 * sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL); if (info_buf_source != NULL) { info_buf_target = info_buf_source + 1; - rc = CIFSSMBUnixQPathInfo(xid, pTcon, fromName, - info_buf_source, cifs_sb_source->local_nls, - cifs_sb_source->mnt_cifs_flags & - CIFS_MOUNT_MAP_SPECIAL_CHR); + if (pTcon->ses->capabilities & CAP_UNIX) + rc = CIFSSMBUnixQPathInfo(xid, pTcon, fromName, + info_buf_source, + cifs_sb_source->local_nls, + cifs_sb_source->mnt_cifs_flags & + CIFS_MOUNT_MAP_SPECIAL_CHR); + /* else rc is still EEXIST so will fall through to + unlink the target and retry rename */ if (rc == 0) { rc = CIFSSMBUnixQPathInfo(xid, pTcon, toName, info_buf_target, @@ -935,7 +939,7 @@ int cifs_rename(struct inode *source_inode, struct dentry *source_direntry, cifs_sb_source->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); if (rc==0) { - CIFSSMBRenameOpenFile(xid, pTcon, netfid, toName, + rc = CIFSSMBRenameOpenFile(xid, pTcon, netfid, toName, cifs_sb_source->local_nls, cifs_sb_source->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); |