Skip to contentSkip to conversation

Separate into relay + pagewriter

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

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

RFC PATCH 14/21 Separate into relay + pagewriter

---
 block/blktrace.c                 |   41 +--
 include/linux/blktrace_api.h     |    4 +-
 include/linux/relay.h            |  246 ++++--------------
 include/linux/relay_pagewriter.h |  220 +++++++++++++++
 kernel/Makefile                  |    2 +-
 kernel/relay.c                   |  376 ++++++++++++---------------
 kernel/relay_pagewriter.c        |  545 ++++++++++++++++++++++++++++++++++++++
 virt/kvm/kvm_trace.c             |   48 +---
 8 files changed, 1008 insertions(+), 474 deletions(-)
 create mode 100644 include/linux/relay_pagewriter.h
 create mode 100644 kernel/relay_pagewriter.c
block/blktrace.c +11 -30
index f60665e..8ba7094 100644
@@ -47,7 +47,7 @@ static void trace_note(struct blk_trace *bt, pid_t pid, int action,
 		t->cpu = cpu;
 		t->pdu_len = len;
 		memcpy((void *) t + sizeof(*t), data, len);
-		relay_write(bt->rchan, t, sizeof(*t) + len);
+		pagewriter_write(bt->pagewriter, t, sizeof(*t) + len);
 		kfree(t);
 	}
 }
@@ -187,7 +187,7 @@ void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
 
 		if (pdu_len)
 			memcpy((void *) t + sizeof(*t), pdu_data, pdu_len);
-		relay_write(bt->rchan, t, sizeof(*t) + pdu_len);
+		pagewriter_write(bt->pagewriter, t, sizeof(*t) + pdu_len);
 		kfree(t);
 	}
 
@@ -247,7 +247,7 @@ err:
 
 static void blk_trace_cleanup(struct blk_trace *bt)
 {
-	relay_close(bt->rchan);
+	pagewriter_close(bt->pagewriter);
 	debugfs_remove(bt->msg_file);
 	debugfs_remove(bt->dropped_file);
 	blk_remove_tree(bt->dir);
@@ -285,7 +285,8 @@ static ssize_t blk_dropped_read(struct file *filp, char __user *buffer,
 	struct blk_trace *bt = filp->private_data;
 	char buf[16];
 
-	snprintf(buf, sizeof(buf), "%u\n", atomic_read(&bt->rchan->dropped));
+	snprintf(buf, sizeof(buf), "%u\n",
+		 atomic_read(&bt->pagewriter->dropped));
 
 	return simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf));
 }
@@ -334,26 +335,6 @@ static const struct file_operations blk_msg_fops = {
 	.write =	blk_msg_write,
 };
 
-static int blk_remove_buf_file_callback(struct dentry *dentry)
-{
-	debugfs_remove(dentry);
-	return 0;
-}
-
-static struct dentry *blk_create_buf_file_callback(const char *filename,
-						   struct dentry *parent,
-						   int mode,
-						   struct rchan_buf *buf)
-{
-	return debugfs_create_file(filename, mode, parent, buf,
-					&relay_file_operations);
-}
-
-static struct rchan_callbacks blk_relay_callbacks = {
-	.create_buf_file	= blk_create_buf_file_callback,
-	.remove_buf_file	= blk_remove_buf_file_callback,
-};
-
 /*
  * Setup everything required to start tracing
  */
@@ -410,9 +391,9 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
 
 	n_pages = (buts->buf_size * buts->buf_nr) / PAGE_SIZE;
 	n_pages_wakeup = buts->buf_size / PAGE_SIZE;
-	bt->rchan = relay_open("trace", dir, n_pages, n_pages_wakeup,
-			       &blk_relay_callbacks, bt, 0UL);
-	if (!bt->rchan)
+	bt->pagewriter = pagewriter_open("trace", dir, n_pages, n_pages_wakeup,
+					 NULL, bt, 0UL);
+	if (!bt->pagewriter)
 		goto err;
 
 	bt->act_mask = buts->act_mask;
@@ -445,8 +426,8 @@ err:
 			debugfs_remove(bt->dropped_file);
 		free_percpu(bt->sequence);
 		free_percpu(bt->msg_data);
-		if (bt->rchan)
-			relay_close(bt->rchan);
+		if (bt->pagewriter)
+			pagewriter_close(bt->pagewriter);
 		kfree(bt);
 	}
 	return ret;
@@ -499,7 +480,7 @@ int blk_trace_startstop(struct request_queue *q, int start)
 	} else {
 		if (bt->trace_state == Blktrace_running) {
 			bt->trace_state = Blktrace_stopped;
-			relay_flush(bt->rchan);
+			pagewriter_flush(bt->pagewriter);
 			ret = 0;
 		}
 	}
include/linux/blktrace_api.h +2 -2
index 628cf3c..59461f2 100644
@@ -2,7 +2,7 @@
 #define BLKTRACE_H
 
 #include <linux/blkdev.h>
-#include <linux/relay.h>
+#include <linux/relay_pagewriter.h>
 
 /*
  * Trace categories
@@ -119,7 +119,7 @@ enum {
 
 struct blk_trace {
 	int trace_state;
-	struct rchan *rchan;
+	struct pagewriter *pagewriter;
 	unsigned long *sequence;
 	unsigned char *msg_data;
 	u16 act_mask;
include/linux/relay.h +46 -200

329 lines not on this page · raw message

include/linux/relay_pagewriter.h new file +220 -0

220 lines not on this page · raw message

kernel/Makefile +1 -1
index 4e1d7df..42f867e 100644
@@ -78,7 +78,7 @@ obj-$(CONFIG_PREEMPT_RCU) += rcupreempt.o
 ifeq ($(CONFIG_PREEMPT_RCU),y)
 obj-$(CONFIG_RCU_TRACE) += rcupreempt_trace.o
 endif
-obj-$(CONFIG_RELAY) += relay.o
+obj-$(CONFIG_RELAY) += relay.o relay_pagewriter.o
 obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
 obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
 obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
kernel/relay.c +168 -208

576 lines not on this page · raw message

kernel/relay_pagewriter.c new file +545 -0

545 lines not on this page · raw message

virt/kvm/kvm_trace.c +15 -33

111 lines not on this page · raw message

Signature · 1 line
1.5.3.5