summaryrefslogtreecommitdiff
path: root/target/linux/generic-2.6/patches/205-block2mtd_fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic-2.6/patches/205-block2mtd_fix.patch')
-rw-r--r--target/linux/generic-2.6/patches/205-block2mtd_fix.patch235
1 files changed, 0 insertions, 235 deletions
diff --git a/target/linux/generic-2.6/patches/205-block2mtd_fix.patch b/target/linux/generic-2.6/patches/205-block2mtd_fix.patch
deleted file mode 100644
index 9aaffc59ef..0000000000
--- a/target/linux/generic-2.6/patches/205-block2mtd_fix.patch
+++ /dev/null
@@ -1,235 +0,0 @@
-diff -urN linux.old/drivers/mtd/devices/block2mtd.c linux.dev/drivers/mtd/devices/block2mtd.c
---- linux.old/drivers/mtd/devices/block2mtd.c 2006-07-29 19:53:54.000000000 +0200
-+++ linux.dev/drivers/mtd/devices/block2mtd.c 2006-07-29 19:47:03.000000000 +0200
-@@ -4,11 +4,10 @@
- * block2mtd.c - create an mtd from a block device
- *
- * Copyright (C) 2001,2002 Simon Evans <spse@secret.org.uk>
-- * Copyright (C) 2004,2005 Jörn Engel <joern@wh.fh-wedel.de>
-+ * Copyright (C) 2004-2006 Jörn Engel <joern@wh.fh-wedel.de>
- *
- * Licence: GPL
- */
--#include <linux/config.h>
- #include <linux/module.h>
- #include <linux/fs.h>
- #include <linux/blkdev.h>
-@@ -19,6 +18,7 @@ #include <linux/init.h>
- #include <linux/mtd/mtd.h>
- #include <linux/buffer_head.h>
- #include <linux/mutex.h>
-+#include <linux/mount.h>
-
- #define VERSION "$Revision: 1.30 $"
-
-@@ -62,10 +61,8 @@
- read_lock_irq(&mapping->tree_lock);
- for (i = 0; i < PAGE_READAHEAD; i++) {
- pagei = index + i;
-- if (pagei > end_index) {
-- INFO("Overrun end of disk in cache readahead\n");
-+ if (pagei > end_index)
- break;
-- }
- page = radix_tree_lookup(&mapping->page_tree, pagei);
- if (page && (!i))
- break;
-@@ -237,6 +237,8 @@ static int _block2mtd_write(struct block
- }
- return 0;
- }
-+
-+
- static int block2mtd_write(struct mtd_info *mtd, loff_t to, size_t len,
- size_t *retlen, const u_char *buf)
- {
-@@ -300,6 +302,19 @@ static struct block2mtd_dev *add_device(
-
- /* Get a handle on the device */
- bdev = open_bdev_excl(devname, O_RDWR, NULL);
-+#ifndef MODULE
-+ if (IS_ERR(bdev)) {
-+
-+ /* We might not have rootfs mounted at this point. Try
-+ to resolve the device name by other means. */
-+
-+ dev_t dev = name_to_dev_t(devname);
-+ if (dev != 0) {
-+ bdev = open_by_devnum(dev, FMODE_WRITE | FMODE_READ);
-+ }
-+ }
-+#endif
-+
- if (IS_ERR(bdev)) {
- ERROR("error: cannot open device %s", devname);
- goto devinit_err;
-@@ -331,7 +347,6 @@ static struct block2mtd_dev *add_device(
- dev->mtd.writev = default_mtd_writev;
- dev->mtd.sync = block2mtd_sync;
- dev->mtd.read = block2mtd_read;
-- dev->mtd.readv = default_mtd_readv;
- dev->mtd.priv = dev;
- dev->mtd.owner = THIS_MODULE;
-
-@@ -351,6 +366,12 @@ devinit_err:
- }
-
-
-+/* This function works similar to reguler strtoul. In addition, it
-+ * allows some suffixes for a more human-readable number format:
-+ * ki, Ki, kiB, KiB - multiply result with 1024
-+ * Mi, MiB - multiply result with 1024^2
-+ * Gi, GiB - multiply result with 1024^3
-+ */
- static int ustrtoul(const char *cp, char **endp, unsigned int base)
- {
- unsigned long result = simple_strtoul(cp, endp, base);
-@@ -359,11 +380,16 @@ static int ustrtoul(const char *cp, char
- result *= 1024;
- case 'M':
- result *= 1024;
-+ case 'K':
- case 'k':
- result *= 1024;
- /* By dwmw2 editorial decree, "ki", "Mi" or "Gi" are to be used. */
-- if ((*endp)[1] == 'i')
-- (*endp) += 2;
-+ if ((*endp)[1] == 'i') {
-+ if ((*endp)[2] == 'B')
-+ (*endp) += 3;
-+ else
-+ (*endp) += 2;
-+ }
- }
- return result;
- }
-@@ -383,26 +409,6 @@ static int parse_num(size_t *num, const
- }
-
-
--static int parse_name(char **pname, const char *token, size_t limit)
--{
-- size_t len;
-- char *name;
--
-- len = strlen(token) + 1;
-- if (len > limit)
-- return -ENOSPC;
--
-- name = kmalloc(len, GFP_KERNEL);
-- if (!name)
-- return -ENOMEM;
--
-- strcpy(name, token);
--
-- *pname = name;
-- return 0;
--}
--
--
- static inline void kill_final_newline(char *str)
- {
- char *newline = strrchr(str, '\n');
-@@ -416,9 +422,16 @@ #define parse_err(fmt, args...) do { \
- return 0; \
- } while (0)
-
--static int block2mtd_setup(const char *val, struct kernel_param *kp)
-+#ifndef MODULE
-+static int block2mtd_init_called = 0;
-+static __initdata char block2mtd_paramline[80 + 12]; /* 80 for device, 12 for erase size */
-+#endif
-+
-+
-+static int block2mtd_setup2(const char *val)
- {
-- char buf[80+12], *str=buf; /* 80 for device, 12 for erase size */
-+ char buf[80 + 12]; /* 80 for device, 12 for erase size */
-+ char *str = buf;
- char *token[2];
- char *name;
- size_t erase_size = PAGE_SIZE;
-@@ -430,7 +443,7 @@ static int block2mtd_setup(const char *v
- strcpy(str, val);
- kill_final_newline(str);
-
-- for (i=0; i<2; i++)
-+ for (i = 0; i < 2; i++)
- token[i] = strsep(&str, ",");
-
- if (str)
-@@ -439,18 +452,16 @@ static int block2mtd_setup(const char *v
- if (!token[0])
- parse_err("no argument");
-
-- ret = parse_name(&name, token[0], 80);
-- if (ret == -ENOMEM)
-- parse_err("out of memory");
-- if (ret == -ENOSPC)
-- parse_err("name too long");
-- if (ret)
-- return 0;
-+ name = token[0];
-+ if (strlen(name) + 1 > 80)
-+ parse_err("device name too long");
-
- if (token[1]) {
- ret = parse_num(&erase_size, token[1]);
-- if (ret)
-+ if (ret) {
-+ kfree(name);
- parse_err("illegal erase size");
-+ }
- }
-
- add_device(name, erase_size);
-@@ -459,13 +470,48 @@ static int block2mtd_setup(const char *v
- }
-
-
-+static int block2mtd_setup(const char *val, struct kernel_param *kp)
-+{
-+#ifdef MODULE
-+ return block2mtd_setup2(val);
-+#else
-+ /* If more parameters are later passed in via
-+ /sys/module/block2mtd/parameters/block2mtd
-+ and block2mtd_init() has already been called,
-+ we can parse the argument now. */
-+
-+ if (block2mtd_init_called)
-+ return block2mtd_setup2(val);
-+
-+ /* During early boot stage, we only save the parameters
-+ here. We must parse them later: if the param passed
-+ from kernel boot command line, block2mtd_setup() is
-+ called so early that it is not possible to resolve
-+ the device (even kmalloc() fails). Deter that work to
-+ block2mtd_setup2(). */
-+
-+ strlcpy(block2mtd_paramline, val, sizeof(block2mtd_paramline));
-+
-+ return 0;
-+#endif
-+}
-+
-+
- module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
- MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>]\"");
-
- static int __init block2mtd_init(void)
- {
-+ int ret = 0;
- INFO("version " VERSION);
-- return 0;
-+
-+#ifndef MODULE
-+ if (strlen(block2mtd_paramline))
-+ ret = block2mtd_setup2(block2mtd_paramline);
-+ block2mtd_init_called = 1;
-+#endif
-+
-+ return ret;
- }
-
-