diff options
Diffstat (limited to 'include/linux/pipe_fs_i.h')
| -rw-r--r-- | include/linux/pipe_fs_i.h | 41 | 
1 files changed, 13 insertions, 28 deletions
diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h index 445796945ac..eb8b8ac6df3 100644 --- a/include/linux/pipe_fs_i.h +++ b/include/linux/pipe_fs_i.h @@ -1,13 +1,12 @@  #ifndef _LINUX_PIPE_FS_I_H  #define _LINUX_PIPE_FS_I_H -#define PIPEFS_MAGIC 0x50495045 -  #define PIPE_DEF_BUFFERS	16  #define PIPE_BUF_FLAG_LRU	0x01	/* page is on the LRU */  #define PIPE_BUF_FLAG_ATOMIC	0x02	/* was atomically mapped */  #define PIPE_BUF_FLAG_GIFT	0x04	/* page is a gift */ +#define PIPE_BUF_FLAG_PACKET	0x08	/* read() as a packet */  /**   *	struct pipe_buffer - a linux kernel pipe buffer @@ -28,32 +27,35 @@ struct pipe_buffer {  /**   *	struct pipe_inode_info - a linux kernel pipe + *	@mutex: mutex protecting the whole thing   *	@wait: reader/writer wait point in case of empty/full pipe   *	@nrbufs: the number of non-empty pipe buffers in this pipe + *	@buffers: total number of buffers (should be a power of 2)   *	@curbuf: the current pipe buffer entry   *	@tmp_page: cached released page   *	@readers: number of current readers of this pipe   *	@writers: number of current writers of this pipe + *	@files: number of struct file referring this pipe (protected by ->i_lock)   *	@waiting_writers: number of writers blocked waiting for room   *	@r_counter: reader counter   *	@w_counter: writer counter   *	@fasync_readers: reader side fasync   *	@fasync_writers: writer side fasync - *	@inode: inode this pipe is attached to   *	@bufs: the circular array of pipe buffers   **/  struct pipe_inode_info { +	struct mutex mutex;  	wait_queue_head_t wait;  	unsigned int nrbufs, curbuf, buffers;  	unsigned int readers;  	unsigned int writers; +	unsigned int files;  	unsigned int waiting_writers;  	unsigned int r_counter;  	unsigned int w_counter;  	struct page *tmp_page;  	struct fasync_struct *fasync_readers;  	struct fasync_struct *fasync_writers; -	struct inode *inode;  	struct pipe_buffer *bufs;  }; @@ -81,25 +83,6 @@ struct pipe_buf_operations {  	int can_merge;  	/* -	 * ->map() returns a virtual address mapping of the pipe buffer. -	 * The last integer flag reflects whether this should be an atomic -	 * mapping or not. The atomic map is faster, however you can't take -	 * page faults before calling ->unmap() again. So if you need to eg -	 * access user data through copy_to/from_user(), then you must get -	 * a non-atomic map. ->map() uses the KM_USER0 atomic slot for -	 * atomic maps, so you can't map more than one pipe_buffer at once -	 * and you have to be careful if mapping another page as source -	 * or destination for a copy (IOW, it has to use something else -	 * than KM_USER0). -	 */ -	void * (*map)(struct pipe_inode_info *, struct pipe_buffer *, int); - -	/* -	 * Undoes ->map(), finishes the virtual mapping of the pipe buffer. -	 */ -	void (*unmap)(struct pipe_inode_info *, struct pipe_buffer *, void *); - -	/*  	 * ->confirm() verifies that the data in the pipe buffer is there  	 * and that the contents are good. If the pages in the pipe belong  	 * to a file system, we may need to wait for IO completion in this @@ -146,19 +129,21 @@ int pipe_proc_fn(struct ctl_table *, int, void __user *, size_t *, loff_t *);  /* Drop the inode semaphore and wait for a pipe event, atomically */  void pipe_wait(struct pipe_inode_info *pipe); -struct pipe_inode_info * alloc_pipe_info(struct inode * inode); -void free_pipe_info(struct inode * inode); -void __free_pipe_info(struct pipe_inode_info *); +struct pipe_inode_info *alloc_pipe_info(void); +void free_pipe_info(struct pipe_inode_info *);  /* Generic pipe buffer ops functions */ -void *generic_pipe_buf_map(struct pipe_inode_info *, struct pipe_buffer *, int); -void generic_pipe_buf_unmap(struct pipe_inode_info *, struct pipe_buffer *, void *);  void generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *);  int generic_pipe_buf_confirm(struct pipe_inode_info *, struct pipe_buffer *);  int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *);  void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *); +extern const struct pipe_buf_operations nosteal_pipe_buf_ops; +  /* for F_SETPIPE_SZ and F_GETPIPE_SZ */  long pipe_fcntl(struct file *, unsigned int, unsigned long arg); +struct pipe_inode_info *get_pipe_info(struct file *file); + +int create_pipe_files(struct file **, int);  #endif  | 
