cifs: take read lock on GlobalSMBSes_lock in is_valid_oplock_break
authorJeff Layton <jlayton@redhat.com>
Sat, 12 Sep 2009 15:54:29 +0000 (11:54 -0400)
committerSteve French <sfrench@us.ibm.com>
Tue, 15 Sep 2009 19:45:10 +0000 (19:45 +0000)
...rather than a write lock. It doesn't change the list so a read lock
should be sufficient.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/misc.c

index f2d508df7ec5a0ff199b617a81ba944df111a59d..191e6220bc76369eb87757ecc2ba316870a9296b 100644 (file)
@@ -562,14 +562,14 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv)
                                continue;
 
                        cifs_stats_inc(&tcon->num_oplock_brks);
-                       write_lock(&GlobalSMBSeslock);
+                       read_lock(&GlobalSMBSeslock);
                        list_for_each(tmp2, &tcon->openFileList) {
                                netfile = list_entry(tmp2, struct cifsFileInfo,
                                                     tlist);
                                if (pSMB->Fid != netfile->netfid)
                                        continue;
 
-                               write_unlock(&GlobalSMBSeslock);
+                               read_unlock(&GlobalSMBSeslock);
                                read_unlock(&cifs_tcp_ses_lock);
                                cFYI(1, ("file id match, oplock break"));
                                pCifsInode = CIFS_I(netfile->pInode);
@@ -584,7 +584,7 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv)
 
                                return true;
                        }
-                       write_unlock(&GlobalSMBSeslock);
+                       read_unlock(&GlobalSMBSeslock);
                        read_unlock(&cifs_tcp_ses_lock);
                        cFYI(1, ("No matching file for oplock break"));
                        return true;