| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |