diff options
| author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-05-08 13:39:59 +0200 | 
|---|---|---|
| committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-05-08 13:39:59 +0200 | 
| commit | 5e13a0c5ec05d382b488a691dfb8af015b1dea1e (patch) | |
| tree | 7a06dfa1f7661f8908193f2437b32452520221d3 /fs/cifs/connect.c | |
| parent | b615b57a124a4af7b68196bc2fb8acc236041fa2 (diff) | |
| parent | 4f256e8aa3eda15c11c3cec3ec5336e1fc579cbd (diff) | |
| download | olio-linux-3.10-5e13a0c5ec05d382b488a691dfb8af015b1dea1e.tar.xz olio-linux-3.10-5e13a0c5ec05d382b488a691dfb8af015b1dea1e.zip  | |
Merge remote-tracking branch 'airlied/drm-core-next' into drm-intel-next-queued
Backmerge of drm-next to resolve a few ugly conflicts and to get a few
fixes from 3.4-rc6 (which drm-next has already merged). Note that this
merge also restricts the stencil cache lra evict policy workaround to
snb (as it should) - I had to frob the code anyway because the
CM0_MASK_SHIFT define died in the masked bit cleanups.
We need the backmerge to get Paulo Zanoni's infoframe regression fix
for gm45 - further bugfixes from him touch the same area and would
needlessly conflict.
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'fs/cifs/connect.c')
| -rw-r--r-- | fs/cifs/connect.c | 115 | 
1 files changed, 30 insertions, 85 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index d81e933a796..5dcc55197fb 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -109,6 +109,8 @@ enum {  	/* Options which could be blank */  	Opt_blank_pass, +	Opt_blank_user, +	Opt_blank_ip,  	Opt_err  }; @@ -183,11 +185,15 @@ static const match_table_t cifs_mount_option_tokens = {  	{ Opt_wsize, "wsize=%s" },  	{ Opt_actimeo, "actimeo=%s" }, +	{ Opt_blank_user, "user=" }, +	{ Opt_blank_user, "username=" },  	{ Opt_user, "user=%s" },  	{ Opt_user, "username=%s" },  	{ Opt_blank_pass, "pass=" },  	{ Opt_pass, "pass=%s" },  	{ Opt_pass, "password=%s" }, +	{ Opt_blank_ip, "ip=" }, +	{ Opt_blank_ip, "addr=" },  	{ Opt_ip, "ip=%s" },  	{ Opt_ip, "addr=%s" },  	{ Opt_unc, "unc=%s" }, @@ -209,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" }, @@ -1117,7 +1125,7 @@ static int get_option_ul(substring_t args[], unsigned long *option)  	string = match_strdup(args);  	if (string == NULL)  		return -ENOMEM; -	rc = kstrtoul(string, 10, option); +	rc = kstrtoul(string, 0, option);  	kfree(string);  	return rc; @@ -1534,15 +1542,17 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  		/* String Arguments */ +		case Opt_blank_user: +			/* null user, ie. anonymous authentication */ +			vol->nullauth = 1; +			vol->username = NULL; +			break;  		case Opt_user:  			string = match_strdup(args);  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				/* null user, ie. anonymous authentication */ -				vol->nullauth = 1; -			} else if (strnlen(string, MAX_USERNAME_SIZE) > +			if (strnlen(string, MAX_USERNAME_SIZE) >  							MAX_USERNAME_SIZE) {  				printk(KERN_WARNING "CIFS: username too long\n");  				goto cifs_parse_mount_err; @@ -1611,14 +1621,15 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			}  			vol->password[j] = '\0';  			break; +		case Opt_blank_ip: +			vol->UNCip = NULL; +			break;  		case Opt_ip:  			string = match_strdup(args);  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				vol->UNCip = NULL; -			} else if (strnlen(string, INET6_ADDRSTRLEN) > +			if (strnlen(string, INET6_ADDRSTRLEN) >  						INET6_ADDRSTRLEN) {  				printk(KERN_WARNING "CIFS: ip address "  						    "too long\n"); @@ -1636,12 +1647,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				printk(KERN_WARNING "CIFS: invalid path to " -						    "network resource\n"); -				goto cifs_parse_mount_err; -			} -  			temp_len = strnlen(string, 300);  			if (temp_len  == 300) {  				printk(KERN_WARNING "CIFS: UNC name too long\n"); @@ -1670,11 +1675,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				printk(KERN_WARNING "CIFS: invalid domain" -						    " name\n"); -				goto cifs_parse_mount_err; -			} else if (strnlen(string, 256) == 256) { +			if (strnlen(string, 256) == 256) {  				printk(KERN_WARNING "CIFS: domain name too"  						    " long\n");  				goto cifs_parse_mount_err; @@ -1693,11 +1694,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				printk(KERN_WARNING "CIFS: srcaddr value not" -						    " specified\n"); -				goto cifs_parse_mount_err; -			} else if (!cifs_convert_address( +			if (!cifs_convert_address(  					(struct sockaddr *)&vol->srcaddr,  					string, strlen(string))) {  				printk(KERN_WARNING "CIFS:  Could not parse" @@ -1710,11 +1707,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				printk(KERN_WARNING "CIFS: Invalid path" -						    " prefix\n"); -				goto cifs_parse_mount_err; -			}  			temp_len = strnlen(string, 1024);  			if (string[0] != '/')  				temp_len++; /* missing leading slash */ @@ -1742,11 +1734,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				printk(KERN_WARNING "CIFS: Invalid iocharset" -						    " specified\n"); -				goto cifs_parse_mount_err; -			} else if (strnlen(string, 1024) >= 65) { +			if (strnlen(string, 1024) >= 65) {  				printk(KERN_WARNING "CIFS: iocharset name "  						    "too long.\n");  				goto cifs_parse_mount_err; @@ -1771,11 +1759,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				printk(KERN_WARNING "CIFS: No socket option" -						    " specified\n"); -				goto cifs_parse_mount_err; -			}  			if (strnicmp(string, "TCP_NODELAY", 11) == 0)  				vol->sockopt_tcp_nodelay = 1;  			break; @@ -1784,12 +1767,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				printk(KERN_WARNING "CIFS: Invalid (empty)" -						    " netbiosname\n"); -				break; -			} -  			memset(vol->source_rfc1001_name, 0x20,  				RFC1001_NAME_LEN);  			/* @@ -1817,11 +1794,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				printk(KERN_WARNING "CIFS: Empty server" -					" netbiosname specified\n"); -				break; -			}  			/* last byte, type, is 0x20 for servr type */  			memset(vol->target_rfc1001_name, 0x20,  				RFC1001_NAME_LEN_WITH_NULL); @@ -1848,12 +1820,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				cERROR(1, "no protocol version specified" -					  " after vers= mount option"); -				goto cifs_parse_mount_err; -			} -  			if (strnicmp(string, "cifs", 4) == 0 ||  			    strnicmp(string, "1", 1) == 0) {  				/* This is the default */ @@ -1868,12 +1834,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,  			if (string == NULL)  				goto out_nomem; -			if (!*string) { -				printk(KERN_WARNING "CIFS: no security flavor" -						    " specified\n"); -				break; -			} -  			if (cifs_parse_security_flavors(string, vol) != 0)  				goto cifs_parse_mount_err;  			break; @@ -2225,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); @@ -3270,10 +3231,6 @@ void cifs_setup_cifs_sb(struct smb_vol *pvolume_info,  	cifs_sb->mnt_uid = pvolume_info->linux_uid;  	cifs_sb->mnt_gid = pvolume_info->linux_gid; -	if (pvolume_info->backupuid_specified) -		cifs_sb->mnt_backupuid = pvolume_info->backupuid; -	if (pvolume_info->backupgid_specified) -		cifs_sb->mnt_backupgid = pvolume_info->backupgid;  	cifs_sb->mnt_file_mode = pvolume_info->file_mode;  	cifs_sb->mnt_dir_mode = pvolume_info->dir_mode;  	cFYI(1, "file mode: 0x%hx  dir mode: 0x%hx", @@ -3304,10 +3261,14 @@ void cifs_setup_cifs_sb(struct smb_vol *pvolume_info,  		cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_RWPIDFORWARD;  	if (pvolume_info->cifs_acl)  		cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_ACL; -	if (pvolume_info->backupuid_specified) +	if (pvolume_info->backupuid_specified) {  		cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPUID; -	if (pvolume_info->backupgid_specified) +		cifs_sb->mnt_backupuid = pvolume_info->backupuid; +	} +	if (pvolume_info->backupgid_specified) {  		cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPGID; +		cifs_sb->mnt_backupgid = pvolume_info->backupgid; +	}  	if (pvolume_info->override_uid)  		cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_UID;  	if (pvolume_info->override_gid) @@ -3656,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)  { @@ -3759,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  |