From 6625b74e90a0b6918c90c408215e76719e459883 Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Wed, 11 Apr 2012 23:00:43 +0100 Subject: [PATCH] rootfs-block: avoid remount when options don't change Mounting, unmounting and then mounting a disk partition takes some time. On embedded systems such as OLPC XO where we disable fsck and fstab reading, the root options are not going to change throughout the mount_root() function, so remounting is time consuming and without change. Detect and optimize for this case so that the filesystem is only mounted once. --- modules.d/95rootfs-block/mount-root.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules.d/95rootfs-block/mount-root.sh b/modules.d/95rootfs-block/mount-root.sh index 2c89431..aef99ae 100755 --- a/modules.d/95rootfs-block/mount-root.sh +++ b/modules.d/95rootfs-block/mount-root.sh @@ -98,20 +98,24 @@ mount_root() { # them; rflags is guaranteed to not be empty rflags="${rootopts:+"${rootopts},"}${rflags}" - umount "$NEWROOT" - # backslashes are treated as escape character in fstab # esc_root=$(echo ${root#block:} | sed 's,\\,\\\\,g') # printf '%s %s %s %s 1 1 \n' "$esc_root" "$NEWROOT" "$rootfs" "$rflags" >/etc/fstab + ran_fsck=0 if [ -z "$fastboot" -a "$READONLY" != "yes" ] && ! strstr "${rflags},${rootopts}" _netdev; then + umount "$NEWROOT" fsck_single "${root#block:}" "$rootfs" "$fsckoptions" _ret=$? [ $_ret -ne 255 ] && echo $_ret >/run/initramfs/root-fsck + ran_fsck=1 fi - info "Remounting ${root#block:} with -o ${rflags}" - mount -t "$rootfs" -o "$rflags" "${root#block:}" "$NEWROOT" 2>&1 | vinfo + if [ -n "$rootopts" -o "$ran_fsck" = "1" ]; then + info "Remounting ${root#block:} with -o ${rflags}" + umount "$NEWROOT" &>/dev/null + mount -t "$rootfs" -o "$rflags" "${root#block:}" "$NEWROOT" 2>&1 | vinfo + fi [ -f "$NEWROOT"/forcefsck ] && rm -f "$NEWROOT"/forcefsck 2>/dev/null [ -f "$NEWROOT"/.autofsck ] && rm -f "$NEWROOT"/.autofsck 2>/dev/null