瀏覽代碼

base-files: fix a possible race condition when trying to mount usb sticks and the usb-storage is included in the kernel, problem reported by Oliver

Waldemar Brodkorb 7 年之前
父節點
當前提交
1f72454eaa
共有 3 個文件被更改,包括 18 次插入7 次删除
  1. 1 1
      package/base-files/Makefile
  2. 16 5
      package/base-files/src/etc/init.d/fs
  3. 1 1
      package/base-files/src/etc/init.d/kmod

+ 1 - 1
package/base-files/Makefile

@@ -6,7 +6,7 @@ include $(ADK_TOPDIR)/mk/rootfs.mk
 
 PKG_NAME:=		base-files
 PKG_VERSION:=		1.1
-PKG_RELEASE:=		20
+PKG_RELEASE:=		21
 PKG_SECTION:=		base/apps
 PKG_DESCR:=		basic files and scripts
 

+ 16 - 5
package/base-files/src/etc/init.d/fs

@@ -1,5 +1,5 @@
 #!/bin/sh
-#INIT 20
+#INIT 10
 [[ $1 = autostart ]] || exit 0
 
 # activate swap
@@ -21,11 +21,15 @@
 # mount local filesystems
 fstypes="ext2 ext3 ext4 xfs vfat ntfs ntfs-3g"
 for fs in $fstypes; do
-	disks=$(grep -v "^#" /etc/fstab|grep $fs|awk '{ print $1 }')
+	procfs=$fs
+	if [ $fs = "ntfs-3g" ];then
+		procfs=fuse
+	fi
+	disks=$(grep -v "^#" /etc/fstab|grep "${fs}[[:blank:]]"|awk '{ print $1 }')
 	for disk in $disks; do
 		logger -t 'Filesystem' "Found $disk with filesystem $fs"
 		mnt=$(grep -v "^#" /etc/fstab|grep "${disk}[[:blank:]]"|awk '{ print $2 }')
-		grep $fs /proc/filesystems >/dev/null 2>&1
+		grep $procfs /proc/filesystems >/dev/null 2>&1
 		if [ $? -eq 0 ];then
 			[ -x /usr/sbin/fsck.$fs ] && {
 				logger -t 'Filesystem' "checking $fs filesystem on $disk"
@@ -33,9 +37,16 @@ for fs in $fstypes; do
 			}
 			logger -t 'Filesystem' "Mounting $disk to $mnt"
 			mkdir -p $mnt > /dev/null 2>&1
-			mount $disk > /dev/null 2>&1
+			if [ -b $disk ]; then
+				mount $disk > /dev/null 2>&1
+			else
+				logger -s -t 'Filesystem' "Skipping mounting $disk, device file missing"
+			fi
+			if [ $? -ne 0 ];then
+				logger -s -t 'Filesystem' "Mounting $disk failed with $?"
+			fi
 		else
-			logger -s -t 'Filesystem' "No $fs filesystem in kernel"
+			logger -s -t 'Filesystem' "No $procfs filesystem in kernel"
 		fi
 	done
 done

+ 1 - 1
package/base-files/src/etc/init.d/kmod

@@ -1,5 +1,5 @@
 #!/bin/sh
-#INIT 10
+#INIT 15
 [[ $1 = autostart ]] || exit 0
 
 . /etc/functions.sh