aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/cifsglob.h
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2008-11-14 13:44:38 -0500
committerSteve French <sfrench@us.ibm.com>2008-11-14 18:42:32 -0500
commite7ddee9037e7dd43de1ad08b51727e552aedd836 (patch)
tree1f4fa723aad80809c5980fcb197aba90a84c26ca /fs/cifs/cifsglob.h
parent3ec332ef7a38c2327e18d087d4120a8e3bd3dc6e (diff)
cifs: disable sharing session and tcon and add new TCP sharing code
The code that allows these structs to be shared is extremely racy. Disable the sharing of SMB and tcon structs for now until we can come up with a way to do this that's race free. We want to continue to share TCP sessions, however since they are required for multiuser mounts. For that, implement a new (hopefully race-free) scheme. Add a new global list of TCP sessions, and take care to get a reference to it whenever we're dealing with one. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/cifsglob.h')
-rw-r--r--fs/cifs/cifsglob.h17
1 files changed, 11 insertions, 6 deletions
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
index 13dc48414a78..313f7bfedec7 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -123,6 +123,7 @@ struct cifs_cred {
123struct TCP_Server_Info { 123struct TCP_Server_Info {
124 struct list_head tcp_ses_list; 124 struct list_head tcp_ses_list;
125 struct list_head smb_ses_list; 125 struct list_head smb_ses_list;
126 int srv_count; /* reference counter */
126 /* 15 character server name + 0x20 16th byte indicating type = srv */ 127 /* 15 character server name + 0x20 16th byte indicating type = srv */
127 char server_RFC1001_name[SERVER_NAME_LEN_WITH_NULL]; 128 char server_RFC1001_name[SERVER_NAME_LEN_WITH_NULL];
128 char unicode_server_Name[SERVER_NAME_LEN_WITH_NULL * 2]; 129 char unicode_server_Name[SERVER_NAME_LEN_WITH_NULL * 2];
@@ -144,7 +145,6 @@ struct TCP_Server_Info {
144 bool svlocal:1; /* local server or remote */ 145 bool svlocal:1; /* local server or remote */
145 bool noblocksnd; /* use blocking sendmsg */ 146 bool noblocksnd; /* use blocking sendmsg */
146 bool noautotune; /* do not autotune send buf sizes */ 147 bool noautotune; /* do not autotune send buf sizes */
147 atomic_t socketUseCount; /* number of open cifs sessions on socket */
148 atomic_t inFlight; /* number of requests on the wire to server */ 148 atomic_t inFlight; /* number of requests on the wire to server */
149#ifdef CONFIG_CIFS_STATS2 149#ifdef CONFIG_CIFS_STATS2
150 atomic_t inSend; /* requests trying to send */ 150 atomic_t inSend; /* requests trying to send */
@@ -591,13 +591,18 @@ require use of the stronger protocol */
591#define GLOBAL_EXTERN extern 591#define GLOBAL_EXTERN extern
592#endif 592#endif
593 593
594 594/*
595/* the list of TCP_Server_Info structures, ie each of the sockets 595 * the list of TCP_Server_Info structures, ie each of the sockets
596 * connecting our client to a distinct server (ip address), is 596 * connecting our client to a distinct server (ip address), is
597 * chained together by global_cifs_sock_list. The list of all our SMB 597 * chained together by cifs_tcp_ses_list. The list of all our SMB
598 * sessions (and from that the tree connections) can be found 598 * sessions (and from that the tree connections) can be found
599 * by iterating over global_cifs_sock_list */ 599 * by iterating over cifs_tcp_ses_list
600GLOBAL_EXTERN struct list_head global_cifs_sock_list; 600 */
601GLOBAL_EXTERN struct list_head cifs_tcp_ses_list;
602
603/* protects cifs_tcp_ses_list and srv_count for each tcp session */
604GLOBAL_EXTERN rwlock_t cifs_tcp_ses_lock;
605
601GLOBAL_EXTERN struct list_head GlobalSMBSessionList; /* BB to be removed by jl*/ 606GLOBAL_EXTERN struct list_head GlobalSMBSessionList; /* BB to be removed by jl*/
602GLOBAL_EXTERN struct list_head GlobalTreeConnectionList; /* BB to be removed */ 607GLOBAL_EXTERN struct list_head GlobalTreeConnectionList; /* BB to be removed */
603GLOBAL_EXTERN rwlock_t GlobalSMBSeslock; /* protects list inserts on 3 above */ 608GLOBAL_EXTERN rwlock_t GlobalSMBSeslock; /* protects list inserts on 3 above */