• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  smb_fs_sb.h
3  *
4  *  Copyright (C) 1995 by Paal-Kr. Engstad and Volker Lendecke
5  *  Copyright (C) 1997 by Volker Lendecke
6  *
7  */
8 
9 #ifndef _SMB_FS_SB
10 #define _SMB_FS_SB
11 
12 #include <linux/types.h>
13 #include <linux/smb.h>
14 
15 /*
16  * Upper limit on the total number of active smb_request structs.
17  */
18 #define MAX_REQUEST_HARD       256
19 
20 enum smb_receive_state {
21 	SMB_RECV_START,		/* No data read, looking for length + sig */
22 	SMB_RECV_HEADER,	/* Reading the header data */
23 	SMB_RECV_HCOMPLETE,	/* Done with the header */
24 	SMB_RECV_PARAM,		/* Reading parameter words */
25 	SMB_RECV_DATA,		/* Reading data bytes */
26 	SMB_RECV_END,		/* End of request */
27 	SMB_RECV_DROP,		/* Dropping this SMB */
28 	SMB_RECV_REQUEST,	/* Received a request and not a reply */
29 };
30 
31 /* structure access macros */
32 #define server_from_inode(inode) SMB_SB((inode)->i_sb)
33 #define server_from_dentry(dentry) SMB_SB((dentry)->d_sb)
34 #define SB_of(server) ((server)->super_block)
35 
36 struct smb_sb_info {
37 	/* List of all smbfs superblocks */
38 	struct list_head entry;
39 
40         enum smb_conn_state state;
41 	struct file * sock_file;
42 	int conn_error;
43 	enum smb_receive_state rstate;
44 
45 	atomic_t nr_requests;
46 	struct list_head xmitq;
47 	struct list_head recvq;
48 	u16 mid;
49 
50         struct smb_mount_data_kernel *mnt;
51 
52 	/* Connections are counted. Each time a new socket arrives,
53 	 * generation is incremented.
54 	 */
55 	unsigned int generation;
56 	struct pid *conn_pid;
57 	struct smb_conn_opt opt;
58 	wait_queue_head_t conn_wq;
59 	int conn_complete;
60 	struct semaphore sem;
61 
62 	unsigned char      header[SMB_HEADER_LEN + 20*2 + 2];
63 	u32                header_len;
64 	u32                smb_len;
65 	u32                smb_read;
66 
67         /* We use our own data_ready callback, but need the original one */
68         void *data_ready;
69 
70 	/* nls pointers for codepage conversions */
71 	struct nls_table *remote_nls;
72 	struct nls_table *local_nls;
73 
74 	struct smb_ops *ops;
75 
76 	struct super_block *super_block;
77 };
78 
79 static inline int
smb_lock_server_interruptible(struct smb_sb_info * server)80 smb_lock_server_interruptible(struct smb_sb_info *server)
81 {
82 	return down_interruptible(&(server->sem));
83 }
84 
85 static inline void
smb_lock_server(struct smb_sb_info * server)86 smb_lock_server(struct smb_sb_info *server)
87 {
88 	down(&(server->sem));
89 }
90 
91 static inline void
smb_unlock_server(struct smb_sb_info * server)92 smb_unlock_server(struct smb_sb_info *server)
93 {
94 	up(&(server->sem));
95 }
96 
97 #endif
98