Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e466e487 authored by Steve French's avatar Steve French
Browse files

[CIFS] Fix oops in cifs_close due to unitialized lock sem and list in


new POSIX locking code

Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 66abda5e
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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
------------
+8 −6
Original line number Diff line number Diff line
@@ -1271,7 +1271,7 @@ 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) {
@@ -1281,23 +1281,25 @@ find_unc(__be32 new_target_ip_addr, char *uncName, char *userName)
				      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;
						}
					}
				}
+4 −0
Original line number Diff line number Diff line
@@ -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);