Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6: [CIFS] report rename failure when target file is locked by Windows [CIFS] Allow null user connections [CIFS] Fix readdir breakage when blocksize set too small
This commit is contained in:
commit
0b0e0b5f1a
@ -1,6 +1,11 @@
|
||||
Version 1.46
|
||||
------------
|
||||
Support deep tree mounts. Better support OS/2, Win9x (DOS) time stamps.
|
||||
Allow null user to be specified on mount ("username="). Do not return
|
||||
EINVAL on readdir when filldir fails due to overwritten blocksize
|
||||
(fixes FC problem). Return error in rename 2nd attempt retry (ie report
|
||||
if rename by handle also fails, after rename by path fails, we were
|
||||
not reporting whether the retry worked or not).
|
||||
|
||||
Version 1.45
|
||||
------------
|
||||
|
@ -822,10 +822,13 @@ cifs_parse_mount_options(char *options, const char *devname,struct smb_vol *vol)
|
||||
} else if (strnicmp(data, "nouser_xattr",12) == 0) {
|
||||
vol->no_xattr = 1;
|
||||
} else if (strnicmp(data, "user", 4) == 0) {
|
||||
if (!value || !*value) {
|
||||
if (!value) {
|
||||
printk(KERN_WARNING
|
||||
"CIFS: invalid or missing username\n");
|
||||
return 1; /* needs_arg; */
|
||||
} else if(!*value) {
|
||||
/* null user, ie anonymous, authentication */
|
||||
vol->nullauth = 1;
|
||||
}
|
||||
if (strnlen(value, 200) < 200) {
|
||||
vol->username = value;
|
||||
@ -1642,6 +1645,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
||||
/* BB fixme parse for domain name here */
|
||||
cFYI(1, ("Username: %s ", volume_info.username));
|
||||
|
||||
} else if (volume_info.nullauth) {
|
||||
cFYI(1,("null user"));
|
||||
} else {
|
||||
cifserror("No username specified");
|
||||
/* In userspace mount helper we can get user name from alternate
|
||||
|
@ -885,10 +885,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,
|
||||
@ -937,7 +941,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);
|
||||
|
@ -896,6 +896,10 @@ static int cifs_filldir(char *pfindEntry, struct file *file,
|
||||
tmp_inode->i_ino,obj_type);
|
||||
if(rc) {
|
||||
cFYI(1,("filldir rc = %d",rc));
|
||||
/* we can not return filldir errors to the caller
|
||||
since they are "normal" when the stat blocksize
|
||||
is too small - we return remapped error instead */
|
||||
rc = -EOVERFLOW;
|
||||
}
|
||||
|
||||
dput(tmp_dentry);
|
||||
@ -1074,6 +1078,11 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir)
|
||||
we want to check for that here? */
|
||||
rc = cifs_filldir(current_entry, file,
|
||||
filldir, direntry, tmp_buf, max_len);
|
||||
if(rc == -EOVERFLOW) {
|
||||
rc = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
file->f_pos++;
|
||||
if(file->f_pos ==
|
||||
cifsFile->srch_inf.index_of_last_entry) {
|
||||
|
Loading…
Reference in New Issue
Block a user