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