at v2.6.13 59 lines 1.9 kB view raw
1#ifndef _LINUX_PIPE_FS_I_H 2#define _LINUX_PIPE_FS_I_H 3 4#define PIPEFS_MAGIC 0x50495045 5 6#define PIPE_BUFFERS (16) 7 8struct pipe_buffer { 9 struct page *page; 10 unsigned int offset, len; 11 struct pipe_buf_operations *ops; 12}; 13 14struct pipe_buf_operations { 15 int can_merge; 16 void * (*map)(struct file *, struct pipe_inode_info *, struct pipe_buffer *); 17 void (*unmap)(struct pipe_inode_info *, struct pipe_buffer *); 18 void (*release)(struct pipe_inode_info *, struct pipe_buffer *); 19}; 20 21struct pipe_inode_info { 22 wait_queue_head_t wait; 23 unsigned int nrbufs, curbuf; 24 struct pipe_buffer bufs[PIPE_BUFFERS]; 25 struct page *tmp_page; 26 unsigned int start; 27 unsigned int readers; 28 unsigned int writers; 29 unsigned int waiting_writers; 30 unsigned int r_counter; 31 unsigned int w_counter; 32 struct fasync_struct *fasync_readers; 33 struct fasync_struct *fasync_writers; 34}; 35 36/* Differs from PIPE_BUF in that PIPE_SIZE is the length of the actual 37 memory allocation, whereas PIPE_BUF makes atomicity guarantees. */ 38#define PIPE_SIZE PAGE_SIZE 39 40#define PIPE_SEM(inode) (&(inode).i_sem) 41#define PIPE_WAIT(inode) (&(inode).i_pipe->wait) 42#define PIPE_BASE(inode) ((inode).i_pipe->base) 43#define PIPE_START(inode) ((inode).i_pipe->start) 44#define PIPE_LEN(inode) ((inode).i_pipe->len) 45#define PIPE_READERS(inode) ((inode).i_pipe->readers) 46#define PIPE_WRITERS(inode) ((inode).i_pipe->writers) 47#define PIPE_WAITING_WRITERS(inode) ((inode).i_pipe->waiting_writers) 48#define PIPE_RCOUNTER(inode) ((inode).i_pipe->r_counter) 49#define PIPE_WCOUNTER(inode) ((inode).i_pipe->w_counter) 50#define PIPE_FASYNC_READERS(inode) (&((inode).i_pipe->fasync_readers)) 51#define PIPE_FASYNC_WRITERS(inode) (&((inode).i_pipe->fasync_writers)) 52 53/* Drop the inode semaphore and wait for a pipe event, atomically */ 54void pipe_wait(struct inode * inode); 55 56struct inode* pipe_new(struct inode* inode); 57void free_pipe_info(struct inode* inode); 58 59#endif