| /* | |
| * 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> | |
| #include <linux/backing-dev.h> | |
| #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; | |
| struct pid *conn_pid; | |
| 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; | |
| struct backing_dev_info bdi; | |
| }; | |
| 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 |