aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/hack-5.15/401-mtd-super-don-t-reply-on-mtdblock-device-minor.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/hack-5.15/401-mtd-super-don-t-reply-on-mtdblock-device-minor.patch')
-rw-r--r--target/linux/generic/hack-5.15/401-mtd-super-don-t-reply-on-mtdblock-device-minor.patch33
1 files changed, 16 insertions, 17 deletions
diff --git a/target/linux/generic/hack-5.15/401-mtd-super-don-t-reply-on-mtdblock-device-minor.patch b/target/linux/generic/hack-5.15/401-mtd-super-don-t-reply-on-mtdblock-device-minor.patch
index 04cf52b096..8f985c0b8f 100644
--- a/target/linux/generic/hack-5.15/401-mtd-super-don-t-reply-on-mtdblock-device-minor.patch
+++ b/target/linux/generic/hack-5.15/401-mtd-super-don-t-reply-on-mtdblock-device-minor.patch
@@ -28,43 +28,42 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
#include <linux/namei.h>
#include <linux/export.h>
#include <linux/ctype.h>
-@@ -121,7 +122,8 @@ int get_tree_mtd(struct fs_context *fc,
+@@ -120,8 +121,9 @@ int get_tree_mtd(struct fs_context *fc,
+ struct fs_context *fc))
{
#ifdef CONFIG_BLOCK
- struct block_device *bdev;
-- int ret, major;
+- dev_t dev;
+- int ret;
+ struct mtd_blktrans_dev *blktrans_dev;
-+ int ret, major, part_bits;
++ struct block_device *bdev;
++ int ret, part_bits;
#endif
int mtdnr;
-@@ -169,21 +171,38 @@ int get_tree_mtd(struct fs_context *fc,
+@@ -169,16 +171,36 @@ int get_tree_mtd(struct fs_context *fc,
/* try the old way - the hack where we allowed users to mount
* /dev/mtdblock$(n) but didn't actually _use_ the blockdev
*/
-- bdev = lookup_bdev(fc->source);
+- ret = lookup_bdev(fc->source, &dev);
+- if (ret) {
+ bdev = blkdev_get_by_path(fc->source, FMODE_READ, NULL);
- if (IS_ERR(bdev)) {
- ret = PTR_ERR(bdev);
++ if (IS_ERR(bdev)) {
++ ret = PTR_ERR(bdev);
errorf(fc, "MTD: Couldn't look up '%s': %d", fc->source, ret);
return ret;
}
- pr_debug("MTDSB: lookup_bdev() returned 0\n");
+ pr_debug("MTDSB: blkdev_get_by_path() returned 0\n");
- major = MAJOR(bdev->bd_dev);
-- mtdnr = MINOR(bdev->bd_dev);
-- bdput(bdev);
-
-- if (major == MTD_BLOCK_MAJOR)
-- return mtd_get_sb_by_nr(fc, mtdnr, fill_super);
-+ if (major == MTD_BLOCK_MAJOR) {
+- if (MAJOR(dev) == MTD_BLOCK_MAJOR)
+- return mtd_get_sb_by_nr(fc, MINOR(dev), fill_super);
++ if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) {
+ if (!bdev->bd_disk) {
+ blkdev_put(bdev, FMODE_READ);
+ BUG();
+ return -EINVAL;
+ }
-+
+
+ blktrans_dev = (struct mtd_blktrans_dev *)(bdev->bd_disk->private_data);
+ if (!blktrans_dev || !blktrans_dev->tr) {
+ blkdev_put(bdev, FMODE_READ);
@@ -76,7 +75,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+ blkdev_put(bdev, FMODE_READ);
+ if (MINOR(bdev->bd_dev) != (mtdnr << part_bits))
+ return -EINVAL;
-
++
+ return mtd_get_sb_by_nr(fc, mtdnr, fill_super);
+ }
+ blkdev_put(bdev, FMODE_READ);