mirror of https://gitee.com/openkylin/linux.git
[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
|
||||
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
|
||||
------------
|
||||
|
|
|
@ -1271,33 +1271,35 @@ find_unc(__be32 new_target_ip_addr, char *uncName, char *userName)
|
|||
|
||||
read_lock(&GlobalSMBSeslock);
|
||||
list_for_each(tmp, &GlobalTreeConnectionList) {
|
||||
cFYI(1, ("Next tcon - "));
|
||||
cFYI(1, ("Next tcon"));
|
||||
tcon = list_entry(tmp, struct cifsTconInfo, cifsConnectionList);
|
||||
if (tcon->ses) {
|
||||
if (tcon->ses->server) {
|
||||
cFYI(1,
|
||||
(" old ip addr: %x == new ip %x ?",
|
||||
("old ip addr: %x == new ip %x ?",
|
||||
tcon->ses->server->addr.sockAddr.sin_addr.
|
||||
s_addr, new_target_ip_addr));
|
||||
if (tcon->ses->server->addr.sockAddr.sin_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 */
|
||||
/* 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));
|
||||
if (strncmp
|
||||
(tcon->treeName, uncName,
|
||||
MAX_TREE_SIZE) == 0) {
|
||||
cFYI(1,
|
||||
("Matched UNC, old user: %s == new: %s ?",
|
||||
("and old usr: %s new: %s",
|
||||
tcon->treeName, uncName));
|
||||
if (strncmp
|
||||
(tcon->ses->userName,
|
||||
userName,
|
||||
MAX_USERNAME_SIZE) == 0) {
|
||||
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->closePend = FALSE;
|
||||
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
|
||||
pCifsFile->pfile = file; */
|
||||
write_lock(&GlobalSMBSeslock);
|
||||
|
|
Loading…
Reference in New Issue