Skip to contentSkip to conversation

Use linked lists instead of arrays for relay buffers.

RFC PATCH In review Tom Zanussi 1 participant 1 message Oct 16, 2008 Relay

lore
Share & tools
lore
#0 lore raw

RFC PATCH 12/21 Use linked lists instead of arrays for relay buffers.

---
 include/linux/relay.h |   12 ++++-
 kernel/relay.c        |  108 ++++++++++++++++++++++++------------------------
 2 files changed, 63 insertions(+), 57 deletions(-)
include/linux/relay.h +9 -3
index 35a6e8c..35912d6 100644
@@ -30,14 +30,21 @@
 #define RCHAN_MODE_OVERWRITE		0x00000001	/* 'flight' mode */
 #define RCHAN_GLOBAL_BUFFER		0x00000002	/* not using per-cpu */
 
+struct relay_page
+{
+	struct page *page;
+	struct list_head list;
+};
+
 /*
  * Per-cpu relay channel buffer
  */
 struct rchan_buf
 {
 	void *data;			/* address of current page */
-	struct page *page;		/* current page */
+	struct relay_page *page;	/* current write page */
 	size_t offset;			/* current offset into page */
+	size_t consumed_offset;		/* bytes consumed in cur page */
 	size_t produced;		/* count of pages produced */
 	size_t consumed;		/* count of pages consumed */
 	struct rchan *chan;		/* associated channel */
@@ -45,10 +52,9 @@ struct rchan_buf
 	struct timer_list timer; 	/* reader wake-up timer */
 	struct dentry *dentry;		/* channel file dentry */
 	struct kref kref;		/* channel buffer refcount */
-	struct page **page_array;	/* array of current buffer pages */
+	struct list_head pages;		/* current set of unconsumed pages */
 	unsigned int page_count;	/* number of current buffer pages */
 	unsigned int finalized;		/* buffer has been finalized */
-	size_t consumed_offset;		/* bytes consumed in cur page */
 	size_t early_bytes;		/* bytes consumed before VFS inited */
 	unsigned int cpu;		/* this buf's cpu */
 } ____cacheline_aligned;
kernel/relay.c +54 -54

207 lines not on this page · raw message

Signature · 1 line
1.5.3.5