kernel: make ubi auto-attach check for a tar file magic
Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 43506
This commit is contained in:
		| @@ -11,7 +11,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/ubi/build.c | --- a/drivers/mtd/ubi/build.c | ||||||
| +++ b/drivers/mtd/ubi/build.c | +++ b/drivers/mtd/ubi/build.c | ||||||
| @@ -1207,6 +1207,36 @@ static struct mtd_info * __init open_mtd | @@ -1207,6 +1207,47 @@ | ||||||
|  	return mtd; |  	return mtd; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -29,6 +29,17 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
| +		mtd = open_mtd_device("data"); | +		mtd = open_mtd_device("data"); | ||||||
| + | + | ||||||
| +	if (!IS_ERR(mtd)) { | +	if (!IS_ERR(mtd)) { | ||||||
|  | +		size_t len; | ||||||
|  | +		char magic[6]; | ||||||
|  | + | ||||||
|  | +		/* check for a tar file magic */ | ||||||
|  | +		err = mtd_read(mtd, 261, 6, &len, (void *) magic); | ||||||
|  | +		if (!err && len == 6 && !strncmp(magic, "ustar", 5)) { | ||||||
|  | +			ubi_err("cannot attach mtd%d as there is a valid tar magic", mtd->index); | ||||||
|  | +			put_mtd_device(mtd); | ||||||
|  | +			return; | ||||||
|  | +		} | ||||||
|  | + | ||||||
| +		/* auto-add only media types where UBI makes sense */ | +		/* auto-add only media types where UBI makes sense */ | ||||||
| +		if (mtd->type == MTD_NANDFLASH || | +		if (mtd->type == MTD_NANDFLASH || | ||||||
| +		    mtd->type == MTD_DATAFLASH || | +		    mtd->type == MTD_DATAFLASH || | ||||||
| @@ -48,7 +59,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  static int __init ubi_init(void) |  static int __init ubi_init(void) | ||||||
|  { |  { | ||||||
|  	int err, i, k; |  	int err, i, k; | ||||||
| @@ -1290,6 +1320,12 @@ static int __init ubi_init(void) | @@ -1290,6 +1331,12 @@ | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/ubi/build.c | --- a/drivers/mtd/ubi/build.c | ||||||
| +++ b/drivers/mtd/ubi/build.c | +++ b/drivers/mtd/ubi/build.c | ||||||
| @@ -1209,6 +1209,36 @@ static struct mtd_info * __init open_mtd | @@ -1209,6 +1209,48 @@ | ||||||
|  	return mtd; |  	return mtd; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -23,12 +23,24 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
| +{ | +{ | ||||||
| +	int err; | +	int err; | ||||||
| +	struct mtd_info *mtd; | +	struct mtd_info *mtd; | ||||||
|  | + | ||||||
| +	/* try attaching mtd device named "ubi" or "data" */ | +	/* try attaching mtd device named "ubi" or "data" */ | ||||||
| +	mtd = open_mtd_device("ubi"); | +	mtd = open_mtd_device("ubi"); | ||||||
| +	if (IS_ERR(mtd)) | +	if (IS_ERR(mtd)) | ||||||
| +		mtd = open_mtd_device("data"); | +		mtd = open_mtd_device("data"); | ||||||
| + | + | ||||||
| +	if (!IS_ERR(mtd)) { | +	if (!IS_ERR(mtd)) { | ||||||
|  | +		size_t len; | ||||||
|  | +		char magic[6]; | ||||||
|  | + | ||||||
|  | +		/* check for a tar file magic */ | ||||||
|  | +		err = mtd_read(mtd, 261, 6, &len, (void *) magic); | ||||||
|  | +		if (!err && len == 6 && !strncmp(magic, "ustar", 5)) { | ||||||
|  | +			ubi_err("cannot attach mtd%d as there is a valid tar magic", mtd->index); | ||||||
|  | +			put_mtd_device(mtd); | ||||||
|  | +			return; | ||||||
|  | +		} | ||||||
|  | + | ||||||
| +		/* auto-add only media types where UBI makes sense */ | +		/* auto-add only media types where UBI makes sense */ | ||||||
| +		if (mtd->type == MTD_NANDFLASH || | +		if (mtd->type == MTD_NANDFLASH || | ||||||
| +		    mtd->type == MTD_DATAFLASH || | +		    mtd->type == MTD_DATAFLASH || | ||||||
| @@ -48,7 +60,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  static int __init ubi_init(void) |  static int __init ubi_init(void) | ||||||
|  { |  { | ||||||
|  	int err, i, k; |  	int err, i, k; | ||||||
| @@ -1298,6 +1328,12 @@ static int __init ubi_init(void) | @@ -1298,6 +1340,12 @@ | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/ubi/build.c | --- a/drivers/mtd/ubi/build.c | ||||||
| +++ b/drivers/mtd/ubi/build.c | +++ b/drivers/mtd/ubi/build.c | ||||||
| @@ -1209,6 +1209,36 @@ static struct mtd_info * __init open_mtd | @@ -1209,6 +1209,47 @@ | ||||||
|  	return mtd; |  	return mtd; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -29,6 +29,17 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
| +		mtd = open_mtd_device("data"); | +		mtd = open_mtd_device("data"); | ||||||
| + | + | ||||||
| +	if (!IS_ERR(mtd)) { | +	if (!IS_ERR(mtd)) { | ||||||
|  | +		size_t len; | ||||||
|  | +		char magic[6]; | ||||||
|  | + | ||||||
|  | +		/* check for a tar file magic */ | ||||||
|  | +		err = mtd_read(mtd, 261, 6, &len, (void *) magic); | ||||||
|  | +		if (!err && len == 6 && !strncmp(magic, "ustar", 5)) { | ||||||
|  | +			ubi_err("cannot attach mtd%d as there is a valid tar magic", mtd->index); | ||||||
|  | +			put_mtd_device(mtd); | ||||||
|  | +			return; | ||||||
|  | +		} | ||||||
|  | + | ||||||
| +		/* auto-add only media types where UBI makes sense */ | +		/* auto-add only media types where UBI makes sense */ | ||||||
| +		if (mtd->type == MTD_NANDFLASH || | +		if (mtd->type == MTD_NANDFLASH || | ||||||
| +		    mtd->type == MTD_DATAFLASH || | +		    mtd->type == MTD_DATAFLASH || | ||||||
| @@ -48,7 +59,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  static int __init ubi_init(void) |  static int __init ubi_init(void) | ||||||
|  { |  { | ||||||
|  	int err, i, k; |  	int err, i, k; | ||||||
| @@ -1298,6 +1328,12 @@ static int __init ubi_init(void) | @@ -1298,6 +1339,12 @@ | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 John Crispin
					John Crispin