| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  smb_fs_sb.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Copyright (C) 1995 by Paal-Kr. Engstad and Volker Lendecke | 
					
						
							|  |  |  |  *  Copyright (C) 1997 by Volker Lendecke | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _SMB_FS_SB
 | 
					
						
							|  |  |  | #define _SMB_FS_SB
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/types.h>
 | 
					
						
							| 
									
										
										
										
											2010-04-22 12:37:07 +02:00
										 |  |  | #include <linux/backing-dev.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <linux/smb.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Upper limit on the total number of active smb_request structs. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define MAX_REQUEST_HARD       256
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum smb_receive_state { | 
					
						
							|  |  |  | 	SMB_RECV_START,		/* No data read, looking for length + sig */ | 
					
						
							|  |  |  | 	SMB_RECV_HEADER,	/* Reading the header data */ | 
					
						
							|  |  |  | 	SMB_RECV_HCOMPLETE,	/* Done with the header */ | 
					
						
							|  |  |  | 	SMB_RECV_PARAM,		/* Reading parameter words */ | 
					
						
							|  |  |  | 	SMB_RECV_DATA,		/* Reading data bytes */ | 
					
						
							|  |  |  | 	SMB_RECV_END,		/* End of request */ | 
					
						
							|  |  |  | 	SMB_RECV_DROP,		/* Dropping this SMB */ | 
					
						
							|  |  |  | 	SMB_RECV_REQUEST,	/* Received a request and not a reply */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* structure access macros */ | 
					
						
							|  |  |  | #define server_from_inode(inode) SMB_SB((inode)->i_sb)
 | 
					
						
							|  |  |  | #define server_from_dentry(dentry) SMB_SB((dentry)->d_sb)
 | 
					
						
							|  |  |  | #define SB_of(server) ((server)->super_block)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct smb_sb_info { | 
					
						
							|  |  |  | 	/* List of all smbfs superblocks */ | 
					
						
							|  |  |  | 	struct list_head entry; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         enum smb_conn_state state; | 
					
						
							|  |  |  | 	struct file * sock_file; | 
					
						
							|  |  |  | 	int conn_error; | 
					
						
							|  |  |  | 	enum smb_receive_state rstate; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	atomic_t nr_requests; | 
					
						
							|  |  |  | 	struct list_head xmitq; | 
					
						
							|  |  |  | 	struct list_head recvq; | 
					
						
							|  |  |  | 	u16 mid; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         struct smb_mount_data_kernel *mnt; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Connections are counted. Each time a new socket arrives,
 | 
					
						
							|  |  |  | 	 * generation is incremented. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int generation; | 
					
						
							| 
									
										
										
										
											2006-12-13 00:35:10 -08:00
										 |  |  | 	struct pid *conn_pid; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct smb_conn_opt opt; | 
					
						
							|  |  |  | 	wait_queue_head_t conn_wq; | 
					
						
							|  |  |  | 	int conn_complete; | 
					
						
							|  |  |  | 	struct semaphore sem; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	unsigned char      header[SMB_HEADER_LEN + 20*2 + 2]; | 
					
						
							|  |  |  | 	u32                header_len; | 
					
						
							|  |  |  | 	u32                smb_len; | 
					
						
							|  |  |  | 	u32                smb_read; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         /* We use our own data_ready callback, but need the original one */ | 
					
						
							|  |  |  |         void *data_ready; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* nls pointers for codepage conversions */ | 
					
						
							|  |  |  | 	struct nls_table *remote_nls; | 
					
						
							|  |  |  | 	struct nls_table *local_nls; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct smb_ops *ops; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct super_block *super_block; | 
					
						
							| 
									
										
										
										
											2010-04-22 12:37:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	struct backing_dev_info bdi; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int | 
					
						
							|  |  |  | smb_lock_server_interruptible(struct smb_sb_info *server) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return down_interruptible(&(server->sem)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void | 
					
						
							|  |  |  | smb_lock_server(struct smb_sb_info *server) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	down(&(server->sem)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void | 
					
						
							|  |  |  | smb_unlock_server(struct smb_sb_info *server) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	up(&(server->sem)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |