aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/cifsfs.c
diff options
context:
space:
mode:
authorSuresh Jayaraman <sjayaraman@suse.de>2010-10-18 13:59:37 -0400
committerSteve French <sfrench@us.ibm.com>2010-10-21 09:14:27 -0400
commit3f9bcca7820a6711307b6499952b13cfcfc31dd6 (patch)
tree6c380f5877562778335d6794e1e4a297f8970d77 /fs/cifs/cifsfs.c
parent3e24e132878c83910b61eb7704511a6d96a0389f (diff)
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>
Diffstat (limited to 'fs/cifs/cifsfs.c')
-rw-r--r--fs/cifs/cifsfs.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
index f1d9c71e807..cb77915a445 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -482,16 +482,16 @@ static void cifs_umount_begin(struct super_block *sb)
482 482
483 tcon = cifs_sb_master_tcon(cifs_sb); 483 tcon = cifs_sb_master_tcon(cifs_sb);
484 484
485 read_lock(&cifs_tcp_ses_lock); 485 spin_lock(&cifs_tcp_ses_lock);
486 if ((tcon->tc_count > 1) || (tcon->tidStatus == CifsExiting)) { 486 if ((tcon->tc_count > 1) || (tcon->tidStatus == CifsExiting)) {
487 /* we have other mounts to same share or we have 487 /* we have other mounts to same share or we have
488 already tried to force umount this and woken up 488 already tried to force umount this and woken up
489 all waiting network requests, nothing to do */ 489 all waiting network requests, nothing to do */
490 read_unlock(&cifs_tcp_ses_lock); 490 spin_unlock(&cifs_tcp_ses_lock);
491 return; 491 return;
492 } else if (tcon->tc_count == 1) 492 } else if (tcon->tc_count == 1)
493 tcon->tidStatus = CifsExiting; 493 tcon->tidStatus = CifsExiting;
494 read_unlock(&cifs_tcp_ses_lock); 494 spin_unlock(&cifs_tcp_ses_lock);
495 495
496 /* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */ 496 /* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */
497 /* cancel_notify_requests(tcon); */ 497 /* cancel_notify_requests(tcon); */
@@ -940,7 +940,7 @@ init_cifs(void)
940 GlobalTotalActiveXid = 0; 940 GlobalTotalActiveXid = 0;
941 GlobalMaxActiveXid = 0; 941 GlobalMaxActiveXid = 0;
942 memset(Local_System_Name, 0, 15); 942 memset(Local_System_Name, 0, 15);
943 rwlock_init(&cifs_tcp_ses_lock); 943 spin_lock_init(&cifs_tcp_ses_lock);
944 spin_lock_init(&cifs_file_list_lock); 944 spin_lock_init(&cifs_file_list_lock);
945 spin_lock_init(&GlobalMid_Lock); 945 spin_lock_init(&GlobalMid_Lock);
946 946