[ewg] [PATCH OFED-1.5] NFSRDMA: remove pipe_fs_i.h and splice.h (resend)

Jon Mason jon at opengridcomputing.com
Tue Jun 2 16:32:58 PDT 2009


pipe_fs_i.h and splice.h are kernel specific and there should be no need
to include them in OFED.  These version of the files that should be
referenced are the versions included in the local/distro kernels and not
the ones included here.  Using these versions cause struct version
mismatches and can be difficult to detect and debug.  The OFED 1.4.1
backports removed these files in the backport patches, and by removing
them now the backport patches can be made smaller and more readable.
 
Signed-Off-By: Jon Mason <jon at opengridcomputing.com>
---

diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h
deleted file mode 100644
index 8e41202..0000000
--- a/include/linux/pipe_fs_i.h
+++ /dev/null
@@ -1,151 +0,0 @@
-#ifndef _LINUX_PIPE_FS_I_H
-#define _LINUX_PIPE_FS_I_H
-
-#define PIPEFS_MAGIC 0x50495045
-
-#define PIPE_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 */
-
-/**
- *	struct pipe_buffer - a linux kernel pipe buffer
- *	@page: the page containing the data for the pipe buffer
- *	@offset: offset of data inside the @page
- *	@len: length of data inside the @page
- *	@ops: operations associated with this buffer. See @pipe_buf_operations.
- *	@flags: pipe buffer flags. See above.
- *	@private: private data owned by the ops.
- **/
-struct pipe_buffer {
-	struct page *page;
-	unsigned int offset, len;
-	const struct pipe_buf_operations *ops;
-	unsigned int flags;
-	unsigned long private;
-};
-
-/**
- *	struct pipe_inode_info - a linux kernel pipe
- *	@wait: reader/writer wait point in case of empty/full pipe
- *	@nrbufs: the number of non-empty pipe buffers in this pipe
- *	@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
- *	@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 {
-	wait_queue_head_t wait;
-	unsigned int nrbufs, curbuf;
-	struct page *tmp_page;
-	unsigned int readers;
-	unsigned int writers;
-	unsigned int waiting_writers;
-	unsigned int r_counter;
-	unsigned int w_counter;
-	struct fasync_struct *fasync_readers;
-	struct fasync_struct *fasync_writers;
-	struct inode *inode;
-	struct pipe_buffer bufs[PIPE_BUFFERS];
-};
-
-/*
- * Note on the nesting of these functions:
- *
- * ->confirm()
- *	->steal()
- *	...
- *	->map()
- *	...
- *	->unmap()
- *
- * That is, ->map() must be called on a confirmed buffer,
- * same goes for ->steal(). See below for the meaning of each
- * operation. Also see kerneldoc in fs/pipe.c for the pipe
- * and generic variants of these hooks.
- */
-struct pipe_buf_operations {
-	/*
-	 * This is set to 1, if the generic pipe read/write may coalesce
-	 * data into an existing buffer. If this is set to 0, a new pipe
-	 * page segment is always used for new data.
-	 */
-	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
-	 * hook. Returns 0 for good, or a negative error value in case of
-	 * error.
-	 */
-	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
-
-	/*
-	 * When the contents of this pipe buffer has been completely
-	 * consumed by a reader, ->release() is called.
-	 */
-	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
-
-	/*
-	 * Attempt to take ownership of the pipe buffer and its contents.
-	 * ->steal() returns 0 for success, in which case the contents
-	 * of the pipe (the buf->page) is locked and now completely owned
-	 * by the caller. The page may then be transferred to a different
-	 * mapping, the most often used case is insertion into different
-	 * file address space cache.
-	 */
-	int (*steal)(struct pipe_inode_info *, struct pipe_buffer *);
-
-	/*
-	 * Get a reference to the pipe buffer.
-	 */
-	void (*get)(struct pipe_inode_info *, struct pipe_buffer *);
-};
-
-/* Differs from PIPE_BUF in that PIPE_SIZE is the length of the actual
-   memory allocation, whereas PIPE_BUF makes atomicity guarantees.  */
-#define PIPE_SIZE		PAGE_SIZE
-
-/* 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 *);
-
-/* 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 *);
-
-#endif
diff --git a/include/linux/splice.h b/include/linux/splice.h
deleted file mode 100644
index 528dcb9..0000000
--- a/include/linux/splice.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Function declerations and data structures related to the splice
- * implementation.
- *
- * Copyright (C) 2007 Jens Axboe <jens.axboe at oracle.com>
- *
- */
-#ifndef SPLICE_H
-#define SPLICE_H
-
-#include <linux/pipe_fs_i.h>
-
-/*
- * splice is tied to pipes as a transport (at least for now), so we'll just
- * add the splice flags here.
- */
-#define SPLICE_F_MOVE	(0x01)	/* move pages instead of copying */
-#define SPLICE_F_NONBLOCK (0x02) /* don't block on the pipe splicing (but */
-				 /* we may still block on the fd we splice */
-				 /* from/to, of course */
-#define SPLICE_F_MORE	(0x04)	/* expect more data */
-#define SPLICE_F_GIFT	(0x08)	/* pages passed in are a gift */
-
-/*
- * Passed to the actors
- */
-struct splice_desc {
-	unsigned int len, total_len;	/* current and remaining length */
-	unsigned int flags;		/* splice flags */
-	/*
-	 * actor() private data
-	 */
-	union {
-		void __user *userptr;	/* memory to write to */
-		struct file *file;	/* file to read/write */
-		void *data;		/* cookie */
-	} u;
-	loff_t pos;			/* file position */
-};
-
-struct partial_page {
-	unsigned int offset;
-	unsigned int len;
-	unsigned long private;
-};
-
-/*
- * Passed to splice_to_pipe
- */
-struct splice_pipe_desc {
-	struct page **pages;		/* page map */
-	struct partial_page *partial;	/* pages[] may not be contig */
-	int nr_pages;			/* number of pages in map */
-	unsigned int flags;		/* splice flags */
-	const struct pipe_buf_operations *ops;/* ops associated with output pipe */
-	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
-};
-
-typedef int (splice_actor)(struct pipe_inode_info *, struct pipe_buffer *,
-			   struct splice_desc *);
-typedef int (splice_direct_actor)(struct pipe_inode_info *,
-				  struct splice_desc *);
-
-extern ssize_t splice_from_pipe(struct pipe_inode_info *, struct file *,
-				loff_t *, size_t, unsigned int,
-				splice_actor *);
-extern ssize_t __splice_from_pipe(struct pipe_inode_info *,
-				  struct splice_desc *, splice_actor *);
-extern ssize_t splice_to_pipe(struct pipe_inode_info *,
-			      struct splice_pipe_desc *);
-extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
-				      splice_direct_actor *);
-
-#endif



More information about the ewg mailing list