cifs: convert cifs_tcp_ses_lock from a rwlock to a spinlock
cifs_tcp_ses_lock is a rwlock with protects the cifs_tcp_ses_list, server->smb_ses_list and the ses->tcon_list. It also protects a few ref counters in server, ses and tcon. In most cases the critical section doesn't seem to be large, in a few cases where it is slightly large, there seem to be really no benefit from concurrent access. I briefly considered RCU mechanism but it appears to me that there is no real need. Replace it with a spinlock and get rid of the last rwlock in the cifs code. Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:

کامیت شده توسط
Steve French

والد
3e24e13287
کامیت
3f9bcca782
@@ -593,9 +593,9 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses)
|
||||
rc = -EIO;
|
||||
goto neg_err_exit;
|
||||
}
|
||||
read_lock(&cifs_tcp_ses_lock);
|
||||
spin_lock(&cifs_tcp_ses_lock);
|
||||
if (server->srv_count > 1) {
|
||||
read_unlock(&cifs_tcp_ses_lock);
|
||||
spin_unlock(&cifs_tcp_ses_lock);
|
||||
if (memcmp(server->server_GUID,
|
||||
pSMBr->u.extended_response.
|
||||
GUID, 16) != 0) {
|
||||
@@ -605,7 +605,7 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses)
|
||||
16);
|
||||
}
|
||||
} else {
|
||||
read_unlock(&cifs_tcp_ses_lock);
|
||||
spin_unlock(&cifs_tcp_ses_lock);
|
||||
memcpy(server->server_GUID,
|
||||
pSMBr->u.extended_response.GUID, 16);
|
||||
}
|
||||
|
مرجع در شماره جدید
Block a user