All pastes #1992701 Raw Edit

Someone

public diff v1 · immutable
#1992701 ·published 2010-11-15 22:53 UTC
rendered paste body
From 82b97cbea5d5cee83d7dadc4b8582f7bbab16b22 Mon Sep 17 00:00:00 2001From: Gilles Grandou <gilles@grandou.net>Date: Thu, 11 Nov 2010 03:00:18 +0100Subject: [PATCH 2/5] add cmdpart= boot parameter in place of partition table--- fs/partitions/Kconfig   |    6 ++++ fs/partitions/Makefile  |    1 + fs/partitions/check.c   |    4 ++ fs/partitions/cmdline.c |   73 +++++++++++++++++++++++++++++++++++++++++++++++ fs/partitions/cmdline.h |    1 + 5 files changed, 85 insertions(+), 0 deletions(-) create mode 100644 fs/partitions/cmdline.c create mode 100644 fs/partitions/cmdline.hdiff --git a/fs/partitions/Kconfig b/fs/partitions/Kconfigindex cb5f0a3..c7a398d 100644--- a/fs/partitions/Kconfig+++ b/fs/partitions/Kconfig@@ -249,3 +249,9 @@ config SYSV68_PARTITION 	  partition table format used by Motorola Delta machines (using 	  sysv68). 	  Otherwise, say N.++config CMDLINE_PARTITION+	bool "Cmdline partition table support" if PARTITION_ADVANCED+	default n+	help+	  Pass partition table via cmdlinediff --git a/fs/partitions/Makefile b/fs/partitions/Makefileindex 03af8ea..11e3a89 100644--- a/fs/partitions/Makefile+++ b/fs/partitions/Makefile@@ -18,3 +18,4 @@ obj-$(CONFIG_IBM_PARTITION) += ibm.o obj-$(CONFIG_EFI_PARTITION) += efi.o obj-$(CONFIG_KARMA_PARTITION) += karma.o obj-$(CONFIG_SYSV68_PARTITION) += sysv68.o+obj-$(CONFIG_CMDLINE_PARTITION) += cmdline.odiff --git a/fs/partitions/check.c b/fs/partitions/check.cindex 7452408..9834042 100644--- a/fs/partitions/check.c+++ b/fs/partitions/check.c@@ -32,6 +32,7 @@ #include "sgi.h" #include "sun.h" #include "ibm.h"+#include "cmdline.h" #include "ultrix.h" #include "efi.h" #include "karma.h"@@ -104,6 +105,9 @@ static int (*check_part[])(struct parsed_partitions *, struct block_device *) = #ifdef CONFIG_IBM_PARTITION 	ibm_partition, #endif+#ifdef CONFIG_CMDLINE_PARTITION+	cmdline_partition,+#endif #ifdef CONFIG_KARMA_PARTITION 	karma_partition, #endifdiff --git a/fs/partitions/cmdline.c b/fs/partitions/cmdline.cnew file mode 100644index 0000000..1495653--- /dev/null+++ b/fs/partitions/cmdline.c@@ -0,0 +1,73 @@+#include <linux/init.h>+#include <linux/kernel.h>++#include "check.h"+#include "cmdline.h"++const char *partition_list = NULL;+static short set = 0;++#define STATE_NUM 0+#define STATE_START 1+#define STATE_SIZE 2+++/*+ */+int+cmdline_partition(struct parsed_partitions *state, struct block_device *bdev)+{++        if (state->parts[0].size)+          return;++	int blocksize, res;+	char *ptr = partition_list;+	char *pstart = ptr;+	short parse_state = STATE_NUM;+	int conf[STATE_SIZE];+++        res = 0;+	blocksize = bdev_hardsect_size(bdev);+	if (blocksize <= 0)+		goto out_exit;++        res = 1;++	do {++	ptr++;+	switch (*ptr) {+		case ':':+		case 0:+		case ',':+		conf[parse_state]=simple_strtol(pstart, NULL, 0);++		if(parse_state == STATE_SIZE) {+			parse_state = STATE_NUM;+			put_partition(state, conf[0], conf[1], conf[2]);+		} else {+			parse_state ++;+		}++		if(*ptr)+			pstart = ++ptr;++	    }+	} while (*ptr);++out_exit:+	return res;+}++static int __init partition_setup(char *options) {+    printk(KERN_INFO "partition setup %x\n", options);++    if (options && *options && !partition_list)+        partition_list = options;++    return 0;++}+__setup("cmdpart=", partition_setup);diff --git a/fs/partitions/cmdline.h b/fs/partitions/cmdline.hnew file mode 100644index 0000000..c753deb--- /dev/null+++ b/fs/partitions/cmdline.h@@ -0,0 +1 @@+int cmdline_partition(struct parsed_partitions *, struct block_device *);-- 1.7.1