[CIFS] Fix oops in cifs_close due to unitialized lock sem and list in
new POSIX locking code Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
66abda5e1f
commit
e466e4876b
|
@ -2,7 +2,10 @@ Version 1.45
|
||||||
------------
|
------------
|
||||||
Do not time out lockw calls when using posix extensions. Do not
|
Do not time out lockw calls when using posix extensions. Do not
|
||||||
time out requests if server still responding reasonably fast
|
time out requests if server still responding reasonably fast
|
||||||
on requests on other threads
|
on requests on other threads. Improve POSIX locking emulation,
|
||||||
|
(lock cancel now works, and unlock of merged range works even
|
||||||
|
to Windows servers now). Fix oops on mount to lanman servers
|
||||||
|
(win9x, os/2 etc.) when null password.
|
||||||
|
|
||||||
Version 1.44
|
Version 1.44
|
||||||
------------
|
------------
|
||||||
|
|
|
@ -1271,33 +1271,35 @@ find_unc(__be32 new_target_ip_addr, char *uncName, char *userName)
|
||||||
|
|
||||||
read_lock(&GlobalSMBSeslock);
|
read_lock(&GlobalSMBSeslock);
|
||||||
list_for_each(tmp, &GlobalTreeConnectionList) {
|
list_for_each(tmp, &GlobalTreeConnectionList) {
|
||||||
cFYI(1, ("Next tcon - "));
|
cFYI(1, ("Next tcon"));
|
||||||
tcon = list_entry(tmp, struct cifsTconInfo, cifsConnectionList);
|
tcon = list_entry(tmp, struct cifsTconInfo, cifsConnectionList);
|
||||||
if (tcon->ses) {
|
if (tcon->ses) {
|
||||||
if (tcon->ses->server) {
|
if (tcon->ses->server) {
|
||||||
cFYI(1,
|
cFYI(1,
|
||||||
(" old ip addr: %x == new ip %x ?",
|
("old ip addr: %x == new ip %x ?",
|
||||||
tcon->ses->server->addr.sockAddr.sin_addr.
|
tcon->ses->server->addr.sockAddr.sin_addr.
|
||||||
s_addr, new_target_ip_addr));
|
s_addr, new_target_ip_addr));
|
||||||
if (tcon->ses->server->addr.sockAddr.sin_addr.
|
if (tcon->ses->server->addr.sockAddr.sin_addr.
|
||||||
s_addr == new_target_ip_addr) {
|
s_addr == new_target_ip_addr) {
|
||||||
/* BB lock tcon and server and tcp session and increment use count here? */
|
/* BB lock tcon, server and tcp session and increment use count here? */
|
||||||
/* found a match on the TCP session */
|
/* found a match on the TCP session */
|
||||||
/* BB check if reconnection needed */
|
/* BB check if reconnection needed */
|
||||||
cFYI(1,("Matched ip, old UNC: %s == new: %s ?",
|
cFYI(1,("IP match, old UNC: %s new: %s",
|
||||||
tcon->treeName, uncName));
|
tcon->treeName, uncName));
|
||||||
if (strncmp
|
if (strncmp
|
||||||
(tcon->treeName, uncName,
|
(tcon->treeName, uncName,
|
||||||
MAX_TREE_SIZE) == 0) {
|
MAX_TREE_SIZE) == 0) {
|
||||||
cFYI(1,
|
cFYI(1,
|
||||||
("Matched UNC, old user: %s == new: %s ?",
|
("and old usr: %s new: %s",
|
||||||
tcon->treeName, uncName));
|
tcon->treeName, uncName));
|
||||||
if (strncmp
|
if (strncmp
|
||||||
(tcon->ses->userName,
|
(tcon->ses->userName,
|
||||||
userName,
|
userName,
|
||||||
MAX_USERNAME_SIZE) == 0) {
|
MAX_USERNAME_SIZE) == 0) {
|
||||||
read_unlock(&GlobalSMBSeslock);
|
read_unlock(&GlobalSMBSeslock);
|
||||||
return tcon;/* also matched user (smb session)*/
|
/* matched smb session
|
||||||
|
(user name */
|
||||||
|
return tcon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,6 +267,10 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
|
||||||
pCifsFile->invalidHandle = FALSE;
|
pCifsFile->invalidHandle = FALSE;
|
||||||
pCifsFile->closePend = FALSE;
|
pCifsFile->closePend = FALSE;
|
||||||
init_MUTEX(&pCifsFile->fh_sem);
|
init_MUTEX(&pCifsFile->fh_sem);
|
||||||
|
init_MUTEX(&pCifsFile->lock_sem);
|
||||||
|
INIT_LIST_HEAD(&pCifsFile->llist);
|
||||||
|
atomic_set(&pCifsFile->wrtPending,0);
|
||||||
|
|
||||||
/* set the following in open now
|
/* set the following in open now
|
||||||
pCifsFile->pfile = file; */
|
pCifsFile->pfile = file; */
|
||||||
write_lock(&GlobalSMBSeslock);
|
write_lock(&GlobalSMBSeslock);
|
||||||
|
|
Loading…
Reference in New Issue