Merge git://git.samba.org/sfrench/cifs-2.6
Pull CIFS fixes from Steve French. * git://git.samba.org/sfrench/cifs-2.6: fs/cifs: fix parsing of dfs referrals cifs: make sure we ignore the credentials= and cred= options [CIFS] Update cifs version to 1.78 cifs - check S_AUTOMOUNT in revalidate cifs: add missing initialization of server->req_lock cifs: don't cap ra_pages at the same level as default_backing_dev_info CIFS: Fix indentation in cifs_show_options
This commit is contained in:
commit
c6de1687f5
|
@ -442,7 +442,7 @@ cifs_show_options(struct seq_file *s, struct dentry *root)
|
||||||
seq_printf(s, ",rsize=%u", cifs_sb->rsize);
|
seq_printf(s, ",rsize=%u", cifs_sb->rsize);
|
||||||
seq_printf(s, ",wsize=%u", cifs_sb->wsize);
|
seq_printf(s, ",wsize=%u", cifs_sb->wsize);
|
||||||
/* convert actimeo and display it in seconds */
|
/* convert actimeo and display it in seconds */
|
||||||
seq_printf(s, ",actimeo=%lu", cifs_sb->actimeo / HZ);
|
seq_printf(s, ",actimeo=%lu", cifs_sb->actimeo / HZ);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,5 +125,5 @@ extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg);
|
||||||
extern const struct export_operations cifs_export_ops;
|
extern const struct export_operations cifs_export_ops;
|
||||||
#endif /* CONFIG_CIFS_NFSD_EXPORT */
|
#endif /* CONFIG_CIFS_NFSD_EXPORT */
|
||||||
|
|
||||||
#define CIFS_VERSION "1.77"
|
#define CIFS_VERSION "1.78"
|
||||||
#endif /* _CIFSFS_H */
|
#endif /* _CIFSFS_H */
|
||||||
|
|
|
@ -4844,8 +4844,12 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
|
||||||
max_len = data_end - temp;
|
max_len = data_end - temp;
|
||||||
node->node_name = cifs_strndup_from_utf16(temp, max_len,
|
node->node_name = cifs_strndup_from_utf16(temp, max_len,
|
||||||
is_unicode, nls_codepage);
|
is_unicode, nls_codepage);
|
||||||
if (!node->node_name)
|
if (!node->node_name) {
|
||||||
rc = -ENOMEM;
|
rc = -ENOMEM;
|
||||||
|
goto parse_DFS_referrals_exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ref++;
|
||||||
}
|
}
|
||||||
|
|
||||||
parse_DFS_referrals_exit:
|
parse_DFS_referrals_exit:
|
||||||
|
|
|
@ -215,6 +215,8 @@ static const match_table_t cifs_mount_option_tokens = {
|
||||||
|
|
||||||
{ Opt_ignore, "cred" },
|
{ Opt_ignore, "cred" },
|
||||||
{ Opt_ignore, "credentials" },
|
{ Opt_ignore, "credentials" },
|
||||||
|
{ Opt_ignore, "cred=%s" },
|
||||||
|
{ Opt_ignore, "credentials=%s" },
|
||||||
{ Opt_ignore, "guest" },
|
{ Opt_ignore, "guest" },
|
||||||
{ Opt_ignore, "rw" },
|
{ Opt_ignore, "rw" },
|
||||||
{ Opt_ignore, "ro" },
|
{ Opt_ignore, "ro" },
|
||||||
|
@ -2183,6 +2185,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
|
||||||
tcp_ses->session_estab = false;
|
tcp_ses->session_estab = false;
|
||||||
tcp_ses->sequence_number = 0;
|
tcp_ses->sequence_number = 0;
|
||||||
tcp_ses->lstrp = jiffies;
|
tcp_ses->lstrp = jiffies;
|
||||||
|
spin_lock_init(&tcp_ses->req_lock);
|
||||||
INIT_LIST_HEAD(&tcp_ses->tcp_ses_list);
|
INIT_LIST_HEAD(&tcp_ses->tcp_ses_list);
|
||||||
INIT_LIST_HEAD(&tcp_ses->smb_ses_list);
|
INIT_LIST_HEAD(&tcp_ses->smb_ses_list);
|
||||||
INIT_DELAYED_WORK(&tcp_ses->echo, cifs_echo_request);
|
INIT_DELAYED_WORK(&tcp_ses->echo, cifs_echo_request);
|
||||||
|
@ -3614,22 +3617,6 @@ cifs_get_volume_info(char *mount_data, const char *devname)
|
||||||
return volume_info;
|
return volume_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* make sure ra_pages is a multiple of rsize */
|
|
||||||
static inline unsigned int
|
|
||||||
cifs_ra_pages(struct cifs_sb_info *cifs_sb)
|
|
||||||
{
|
|
||||||
unsigned int reads;
|
|
||||||
unsigned int rsize_pages = cifs_sb->rsize / PAGE_CACHE_SIZE;
|
|
||||||
|
|
||||||
if (rsize_pages >= default_backing_dev_info.ra_pages)
|
|
||||||
return default_backing_dev_info.ra_pages;
|
|
||||||
else if (rsize_pages == 0)
|
|
||||||
return rsize_pages;
|
|
||||||
|
|
||||||
reads = default_backing_dev_info.ra_pages / rsize_pages;
|
|
||||||
return reads * rsize_pages;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *volume_info)
|
cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *volume_info)
|
||||||
{
|
{
|
||||||
|
@ -3717,7 +3704,7 @@ try_mount_again:
|
||||||
cifs_sb->rsize = cifs_negotiate_rsize(tcon, volume_info);
|
cifs_sb->rsize = cifs_negotiate_rsize(tcon, volume_info);
|
||||||
|
|
||||||
/* tune readahead according to rsize */
|
/* tune readahead according to rsize */
|
||||||
cifs_sb->bdi.ra_pages = cifs_ra_pages(cifs_sb);
|
cifs_sb->bdi.ra_pages = cifs_sb->rsize / PAGE_CACHE_SIZE;
|
||||||
|
|
||||||
remote_path_check:
|
remote_path_check:
|
||||||
#ifdef CONFIG_CIFS_DFS_UPCALL
|
#ifdef CONFIG_CIFS_DFS_UPCALL
|
||||||
|
|
|
@ -668,12 +668,19 @@ cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd)
|
||||||
return 0;
|
return 0;
|
||||||
else {
|
else {
|
||||||
/*
|
/*
|
||||||
* Forcibly invalidate automounting directory inodes
|
* If the inode wasn't known to be a dfs entry when
|
||||||
* (remote DFS directories) so to have them
|
* the dentry was instantiated, such as when created
|
||||||
* instantiated again for automount
|
* via ->readdir(), it needs to be set now since the
|
||||||
|
* attributes will have been updated by
|
||||||
|
* cifs_revalidate_dentry().
|
||||||
*/
|
*/
|
||||||
if (IS_AUTOMOUNT(direntry->d_inode))
|
if (IS_AUTOMOUNT(direntry->d_inode) &&
|
||||||
return 0;
|
!(direntry->d_flags & DCACHE_NEED_AUTOMOUNT)) {
|
||||||
|
spin_lock(&direntry->d_lock);
|
||||||
|
direntry->d_flags |= DCACHE_NEED_AUTOMOUNT;
|
||||||
|
spin_unlock(&direntry->d_lock);
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue