Re: [PATCH v6.12.y 1/2] mtd: ubi: skip programming unused bits in ubi headers
Zhihao Cheng <[email protected]>
| Newsgroups | org.infradead.lists.linux-mtd,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
在 2026/8/18 10:09, Dominique Martinet 写道: > From: Cheng Ming Lin <[email protected]> > > This patch prevents unnecessary programming of bits in ec_hdr and > vid_hdr that are not used or read during normal UBI operation. These > unused bits are typcially already set to 1 in erased flash and do not > need to be explicitly programmed to 0 if they are not used. > > Programming such unused areas offers no functional benefit and may > result in unnecessary flash wear, reducing the overall lifetime of the > device. By skipping these writes, we preserve the flash state as much as > possible and minimize wear caused by redundant operations. > > This change ensures that only necessary fields are written when preparing > UBI headers, improving flash efficiency without affecting functionality. > > Additionally, the Kioxia TC58NVG1S3HTA00 datasheet (page 63) also notes > that continuous program/erase cycling with a high percentage of '0' bits > in the data pattern can accelerate block endurance degradation. > This further supports avoiding large 0x00 patterns. > > Link: https://europe.kioxia.com/content/dam/kioxia/newidr/productinfo/datasheet/201910/DST_TC58NVG1S3HTA00-TDE_EN_31442.pdf > > Signed-off-by: Cheng Ming Lin <[email protected]> > Reviewed-by: Miquel Raynal <[email protected]> > Reviewed-by: Zhihao Cheng <[email protected]> > Signed-off-by: Richard Weinberger <[email protected]> > (cherry picked from commit 77530d1a78ca5c274e37d6494a965223672630b2) > Signed-off-by: Dominique Martinet <[email protected]> > --- > drivers/mtd/ubi/io.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > Reviewed-by: Zhihao Cheng <[email protected]> > diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c > index a4999bce435f..915eb64cb001 100644 > --- a/drivers/mtd/ubi/io.c > +++ b/drivers/mtd/ubi/io.c > @@ -868,6 +868,8 @@ int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum, > return -EROFS; > } > > + memset((char *)ec_hdr + UBI_EC_HDR_SIZE, 0xFF, ubi->ec_hdr_alsize - UBI_EC_HDR_SIZE); > + > err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize); > return err; > } > @@ -1150,6 +1152,14 @@ int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum, > return -EROFS; > } > > + if (ubi->vid_hdr_shift) { > + memset((char *)p, 0xFF, ubi->vid_hdr_shift); > + memset((char *)p + ubi->vid_hdr_shift + UBI_VID_HDR_SIZE, 0xFF, > + ubi->vid_hdr_alsize - (ubi->vid_hdr_shift + UBI_VID_HDR_SIZE)); > + } else { > + memset((char *)p + UBI_VID_HDR_SIZE, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE); > + } > + > err = ubi_io_write(ubi, p, pnum, ubi->vid_hdr_aloffset, > ubi->vid_hdr_alsize); > return err; > ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/