blob: bb947dd1fba92515170f1a5de745dde34026eb0a [file] [log] [blame]
* 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)
static inline void
smb_unlock_server(struct smb_sb_info *server)