diff options
author | Suresh Jayaraman <sjayaraman@suse.de> | 2010-10-18 13:59:37 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2010-10-21 09:14:27 -0400 |
commit | 3f9bcca7820a6711307b6499952b13cfcfc31dd6 (patch) | |
tree | 6c380f5877562778335d6794e1e4a297f8970d77 /fs/cifs/cifsfs.c | |
parent | 3e24e132878c83910b61eb7704511a6d96a0389f (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.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index f1d9c71e807f..cb77915a445b 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 | ||