Fix for in kernel emergency remount when loop mounts are used
authorChristian Poetzsch <christian.potzsch@imgtec.com>
Fri, 24 Jul 2015 15:42:58 +0000 (16:42 +0100)
committerJohn Stultz <john.stultz@linaro.org>
Tue, 16 Feb 2016 21:54:20 +0000 (13:54 -0800)
adb reboot calls /proc/sysrq-trigger to force an emergency remount (ro) of all
mounted disks. This is executed in the order of the time the mount was originally
done. Because we have a test system which loop mount images from an extra
partition, we see errors cause the loop mounted partitions gets remounted after
this physical partition was set to read only already.

Fix this by reversing the order of the emergency remount. This will remount the
disk first which have been mounted last.

So instead of remounting in this order:
 /dev/sda1
 /dev/loop1
 /dev/loop2
we now remount in this order:
 /dev/loop2
 /dev/loop1
 /dev/sda1

Change-Id: I68fe7e16cc9400ab5278877af70c9ea1d9b57936
Signed-off-by: Christian Poetzsch <christian.potzsch@imgtec.com>
fs/super.c

index 954aeb80e202be0a40fc42eeca465c033ab1fc9a..1014e7cc355fbac57fc1aa3073853a7954b77e38 100644 (file)
@@ -789,7 +789,7 @@ static void do_emergency_remount(struct work_struct *work)
        struct super_block *sb, *p = NULL;
 
        spin_lock(&sb_lock);
-       list_for_each_entry(sb, &super_blocks, s_list) {
+       list_for_each_entry_reverse(sb, &super_blocks, s_list) {
                if (hlist_unhashed(&sb->s_instances))
                        continue;
                sb->s_count++;