forked from mirrors/linux
		
	smbfs keeps track of the user space server process in conn_pid. This converts that track to use a struct pid instead of pid_t. This keeps us safe from pid wrap around issues and prepares the way for the pid namespace. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
		
			
				
	
	
		
			101 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 *  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
 | 
						|
 | 
						|
#ifdef __KERNEL__
 | 
						|
 | 
						|
#include <linux/types.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;
 | 
						|
};
 | 
						|
 | 
						|
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 /* __KERNEL__ */
 | 
						|
 | 
						|
#endif
 |