Commit 50cb4373 authored by Baokun Li's avatar Baokun Li Committed by Richard Weinberger
Browse files

ubifs: read-only if LEB may always be taken in ubifs_garbage_collect



If ubifs_garbage_collect_leb() returns -EAGAIN and ubifs_return_leb
returns error, a LEB will always has a "taken" flag. In this case,
set the ubifs to read-only to prevent a worse situation.

Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
parent 0d765021
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -756,8 +756,17 @@ int ubifs_garbage_collect(struct ubifs_info *c, int anyway)
				 * caller instead of the original '-EAGAIN'.
				 */
				err = ubifs_return_leb(c, lp.lnum);
				if (err)
				if (err) {
					ret = err;
					/*
					 * An LEB may always be "taken",
					 * so setting ubifs to read-only,
					 * and then executing sync wbuf will
					 * return -EROFS and enter the "out"
					 * error branch.
					 */
					ubifs_ro_mode(c, ret);
				}
				/*  Maybe double return LEB if goto out */
				lp.lnum = -1;
				break;