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

Commit f5cf319c authored by Artem Bityutskiy's avatar Artem Bityutskiy
Browse files

UBIFS: allocate orphans scan buffer on demand



Instead of using pre-allocated 'c->dbg->buf' buffer in
'dbg_scan_orphans()', dynamically allocate it when needed. The intend
is to get rid of the pre-allocated 'c->dbg->buf' buffer and save
128KiB of RAM (or more if PEB size is larger). Indeed, currently we
allocate this memory even if the user never enables any self-check,
which is wasteful.

Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
parent cab95d44
Loading
Loading
Loading
Loading
+9 −1
Original line number Original line Diff line number Diff line
@@ -892,15 +892,22 @@ static int dbg_read_orphans(struct check_info *ci, struct ubifs_scan_leb *sleb)
static int dbg_scan_orphans(struct ubifs_info *c, struct check_info *ci)
static int dbg_scan_orphans(struct ubifs_info *c, struct check_info *ci)
{
{
	int lnum, err = 0;
	int lnum, err = 0;
	void *buf;


	/* Check no-orphans flag and skip this if no orphans */
	/* Check no-orphans flag and skip this if no orphans */
	if (c->no_orphs)
	if (c->no_orphs)
		return 0;
		return 0;


	buf = __vmalloc(c->leb_size, GFP_KERNEL | GFP_NOFS, PAGE_KERNEL);
	if (!buf) {
		ubifs_err("cannot allocate memory to check orphans");
		return 0;
	}

	for (lnum = c->orph_first; lnum <= c->orph_last; lnum++) {
	for (lnum = c->orph_first; lnum <= c->orph_last; lnum++) {
		struct ubifs_scan_leb *sleb;
		struct ubifs_scan_leb *sleb;


		sleb = ubifs_scan(c, lnum, 0, c->dbg->buf, 0);
		sleb = ubifs_scan(c, lnum, 0, buf, 0);
		if (IS_ERR(sleb)) {
		if (IS_ERR(sleb)) {
			err = PTR_ERR(sleb);
			err = PTR_ERR(sleb);
			break;
			break;
@@ -912,6 +919,7 @@ static int dbg_scan_orphans(struct ubifs_info *c, struct check_info *ci)
			break;
			break;
	}
	}


	vfree(buf);
	return err;
	return err;
}
}