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
|
@ -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;
|
||||
#endif /* CONFIG_CIFS_NFSD_EXPORT */
|
||||
|
||||
#define CIFS_VERSION "1.77"
|
||||
#define CIFS_VERSION "1.78"
|
||||
#endif /* _CIFSFS_H */
|
||||
|
|
|
@ -4844,8 +4844,12 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
|
|||
max_len = data_end - temp;
|
||||
node->node_name = cifs_strndup_from_utf16(temp, max_len,
|
||||
is_unicode, nls_codepage);
|
||||
if (!node->node_name)
|
||||
if (!node->node_name) {
|
||||
rc = -ENOMEM;
|
||||
goto parse_DFS_referrals_exit;
|
||||
}
|
||||
|
||||
ref++;
|
||||
}
|
||||
|
||||
parse_DFS_referrals_exit:
|
||||
|
|
|
@ -215,6 +215,8 @@ static const match_table_t cifs_mount_option_tokens = {
|
|||
|
||||
{ Opt_ignore, "cred" },
|
||||
{ Opt_ignore, "credentials" },
|
||||
{ Opt_ignore, "cred=%s" },
|
||||
{ Opt_ignore, "credentials=%s" },
|
||||
{ Opt_ignore, "guest" },
|
||||
{ Opt_ignore, "rw" },
|
||||
{ Opt_ignore, "ro" },
|
||||
|
@ -2183,6 +2185,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
|
|||
tcp_ses->session_estab = false;
|
||||
tcp_ses->sequence_number = 0;
|
||||
tcp_ses->lstrp = jiffies;
|
||||
spin_lock_init(&tcp_ses->req_lock);
|
||||
INIT_LIST_HEAD(&tcp_ses->tcp_ses_list);
|
||||
INIT_LIST_HEAD(&tcp_ses->smb_ses_list);
|
||||
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;
|
||||
}
|
||||
|
||||
/* 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
|
||||
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);
|
||||
|
||||
/* 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:
|
||||
#ifdef CONFIG_CIFS_DFS_UPCALL
|
||||
|
|
|
@ -668,12 +668,19 @@ cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd)
|
|||
return 0;
|
||||
else {
|
||||
/*
|
||||
* Forcibly invalidate automounting directory inodes
|
||||
* (remote DFS directories) so to have them
|
||||
* instantiated again for automount
|
||||
* If the inode wasn't known to be a dfs entry when
|
||||
* the dentry was instantiated, such as when created
|
||||
* 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))
|
||||
return 0;
|
||||
if (IS_AUTOMOUNT(direntry->d_inode) &&
|
||||
!(direntry->d_flags & DCACHE_NEED_AUTOMOUNT)) {
|
||||
spin_lock(&direntry->d_lock);
|
||||
direntry->d_flags |= DCACHE_NEED_AUTOMOUNT;
|
||||
spin_unlock(&direntry->d_lock);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue