Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43b043e7 authored by Josselin Costanzi's avatar Josselin Costanzi Committed by Artem Bityutskiy
Browse files

UBI: reduce memory consumption



Remove the pre-allocated 'peb_buf2' buffer because we do not really need it.
The only reason UBI has it is to check that the data were written correctly.
But we do not have to have 2 buffers for this and waste RAM - we can just
compare CRC checksums instead. This reduces UBI memory consumption.

Artem bityutskiy: massaged the patch and commit message

Signed-off-by: default avatarJosselin Costanzi <josselin.costanzi@mobile-devices.fr>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
parent 7eb3aa65
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -949,10 +949,6 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num, int vid_hdr_offset)
	if (!ubi->peb_buf1)
		goto out_free;

	ubi->peb_buf2 = vmalloc(ubi->peb_size);
	if (!ubi->peb_buf2)
		goto out_free;

	err = ubi_debugging_init_dev(ubi);
	if (err)
		goto out_free;
@@ -1030,7 +1026,6 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num, int vid_hdr_offset)
	ubi_debugging_exit_dev(ubi);
out_free:
	vfree(ubi->peb_buf1);
	vfree(ubi->peb_buf2);
	if (ref)
		put_device(&ubi->dev);
	else
@@ -1102,7 +1097,6 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway)
	put_mtd_device(ubi->mtd);
	ubi_debugging_exit_dev(ubi);
	vfree(ubi->peb_buf1);
	vfree(ubi->peb_buf2);
	ubi_msg("mtd%d is detached from ubi%d", ubi->mtd->index, ubi->ubi_num);
	put_device(&ubi->dev);
	return 0;
+3 −3
Original line number Diff line number Diff line
@@ -1134,8 +1134,8 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to,
		 * We've written the data and are going to read it back to make
		 * sure it was written correctly.
		 */

		err = ubi_io_read_data(ubi, ubi->peb_buf2, to, 0, aldata_size);
		memset(ubi->peb_buf1, 0xFF, aldata_size);
		err = ubi_io_read_data(ubi, ubi->peb_buf1, to, 0, aldata_size);
		if (err) {
			if (err != UBI_IO_BITFLIPS) {
				ubi_warn("error %d while reading data back "
@@ -1149,7 +1149,7 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to,

		cond_resched();

		if (memcmp(ubi->peb_buf1, ubi->peb_buf2, aldata_size)) {
		if (crc != crc32(UBI_CRC32_INIT, ubi->peb_buf1, data_size)) {
			ubi_warn("read data back from PEB %d and it is "
				 "different", to);
			err = -EINVAL;
+1 −3
Original line number Diff line number Diff line
@@ -388,8 +388,7 @@ struct ubi_wl_entry;
 * @mtd: MTD device descriptor
 *
 * @peb_buf1: a buffer of PEB size used for different purposes
 * @peb_buf2: another buffer of PEB size used for different purposes
 * @buf_mutex: protects @peb_buf1 and @peb_buf2
 * @buf_mutex: protects @peb_buf1
 * @ckvol_mutex: serializes static volume checking when opening
 *
 * @dbg: debugging information for this UBI device
@@ -472,7 +471,6 @@ struct ubi_device {
	struct mtd_info *mtd;

	void *peb_buf1;
	void *peb_buf2;
	struct mutex buf_mutex;
	struct mutex ckvol_mutex;