base-files: pad root.squashfs to 64KiB in ubi volumes
authorChristian Lamparter <chunkeey@gmail.com>
Sat, 24 Aug 2019 10:55:40 +0000 (12:55 +0200)
committerChristian Lamparter <chunkeey@gmail.com>
Sun, 25 Aug 2019 11:27:00 +0000 (13:27 +0200)
commite238afa5c7d80191da931092130919e8fa636ba7
treedc23b6ea8d54e797a77a4f365c79790e228748d3
parent4db53e34d1693a04529679749a1dd99b9a775ed1
base-files: pad root.squashfs to 64KiB in ubi volumes

SquashFS's HOWTO states in the section "Using mksquashfs"
<https://elinux.org/Squash_FS_Howto#Using_mksquashfs>
that a padding is necessary "for the filesystem to be used
on block devices."

OpenWrt's mksquashfs for the rootfs (which is usually
squashfs) is instructed to skip the padding via the nopad
option because the rootfs will be padded by functions like
pad-rootfs to the eraseblocksize which is usually much
bigger at somewhere 64KiB.

But this is a problem for squashfs as rootfs in ubi
partitions. Currently no explicit padding is being
set and it currently works for the most time because
ubi volumes are always aligned to LEBs which could
be close enough for 4KiB paddings...

Digging down deeper revealed that squashfs excepts blocks
to be up to PAGE_SIZE. This is explained in this bug report
that states that the 4k padding for ARCHs with 64KiB pages
resulted in "attempt access beyond end of device" errors:
<https://sourceforge.net/p/squashfs/mailman/message/28307755/>

This patch changes sysupgrade to follow fstools with its
ROOTDEV_OVERLAY_ALIGN (=64KiB) and aligns squashfs rootfs
filesystem to the same amount, while also changing the
ubinize script to apply the alignment in the same manner.
(More additions would be welcome. Note: ubinize and
ubimkvol don't support alignment values that are bigger
than a LEB!)

Reported-by: Russell Senior <russell@personaltelco.net>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
package/base-files/files/lib/upgrade/nand.sh
scripts/ubinize-image.sh