Hi Heiko, On 2026-10-04T04:06:44, Heiko Schocher <[email protected]> wrote: > mtd: align a partition on the write size if the device cannot erase > > allocate_partition() aligns a partition on the erase size of its master > and checks the offset and the size against it with mtd_mod_by_eb(). A > device which cannot erase has no erase size, so that check divides by > zero, "mtd list" shows > > ### ERROR ### Please RESET the board ### > > Linux aligns the partition of such a device on the write size instead, > see wr_alignment in allocate_partition() in drivers/mtd/mtdpart.c. Do > the same here, and take the alignment for the MTDPART_OFS_NXTBLK > rounding from the same place, which divided by the erase size as well.
> > Signed-off-by: Heiko Schocher <[email protected]> > > drivers/mtd/mtdpart.c | 35 ++++++++++++++++++++++++++--------- > 1 file changed, 26 insertions(+), 9 deletions(-) > diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c > @@ -563,8 +563,12 @@ static struct mtd_info *allocate_partition(struct > mtd_info *master, > + u32 wr_alignment = (master->flags & MTD_NO_ERASE) ? master->writesize : > + master->erasesize; Patch 1 decides that a device cannot erase with !mtd->erasesize || !mtd->_erase, but this patch checks MTD_NO_ERASE, and the two don't always agree. A driver that leaves erasesize at 0 without setting MTD_NO_ERASE still divides by zero here, as does an MTD_NO_ERASE driver that leaves writesize at 0. Since the point is to stop 'mtd list' crashing, I suggest skipping the alignment checks, or adding a WARN_ON(), when wr_alignment is 0, rather than relying on every driver setting the flags correctly. What do you think? > diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c > @@ -731,19 +737,30 @@ static struct mtd_info *allocate_partition(struct > mtd_info *master, > + tmp = slave->offset; > + remainder = do_div(tmp, wr_alignment); > + if ((slave->flags & MTD_WRITEABLE) && remainder) { > /* Doesn't start on a boundary of major erase size */ This comment is now out of date. In any case: Reviewed-by: Simon Glass <[email protected]> Regards, Simon
