diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2018-09-12 14:51:38 +0200 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2018-09-20 21:37:07 +0200 |
commit | d3bdc016c598e09a4ddf17805d17d43759b0a582 (patch) | |
tree | a35b6a33a9d3abf650b87e4aa722c5727864591a /fs/ubifs/super.c | |
parent | 37f31b6ca4311b94d985fb398a72e5399ad57925 (diff) | |
download | lwn-d3bdc016c598e09a4ddf17805d17d43759b0a582.tar.gz lwn-d3bdc016c598e09a4ddf17805d17d43759b0a582.zip |
ubifs: drop false positive assertion
The following sequence triggers
ubifs_assert(c, c->lst.taken_empty_lebs > 0);
at the end of ubifs_remount_fs():
mount -t ubifs /dev/ubi0_0 /mnt
echo 1 > /sys/kernel/debug/ubifs/ubi0_0/ro_error
umount /mnt
mount -t ubifs -o ro /dev/ubix_y /mnt
mount -o remount,ro /mnt
The resulting
UBIFS assert failed in ubifs_remount_fs at 1878 (pid 161)
is a false positive. In the case above c->lst.taken_empty_lebs has
never been changed from its initial zero value. This will only happen
when the deferred recovery is done.
Fix this by doing the assertion only when recovery has been done
already.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'fs/ubifs/super.c')
-rw-r--r-- | fs/ubifs/super.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 87d08f738632..bf000c8aeffb 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c @@ -1912,7 +1912,9 @@ static int ubifs_remount_fs(struct super_block *sb, int *flags, char *data) mutex_unlock(&c->bu_mutex); } - ubifs_assert(c, c->lst.taken_empty_lebs > 0); + if (!c->need_recovery) + ubifs_assert(c, c->lst.taken_empty_lebs > 0); + return 0; } |