Merge git://git.infradead.org/users/willy/linux-nvme
[pandora-kernel.git] / include / linux / pipe_fs_i.h
index ad1a427..b8809fe 100644 (file)
@@ -27,6 +27,7 @@ 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)
@@ -34,26 +35,27 @@ struct pipe_buffer {
  *     @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 refering 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;
 };
 
@@ -144,9 +146,8 @@ 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);