92 lines
2.2 KiB
Bash
92 lines
2.2 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2009-2012 OpenWrt.org
|
|
# Copyright (C) 2010 Vertical Communications
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
# See /LICENSE for more information.
|
|
#
|
|
|
|
. /lib/functions/block.sh
|
|
|
|
blkdev=`dirname $DEVPATH`
|
|
if [ `basename $blkdev` != "block" ]; then
|
|
|
|
device=`basename $DEVPATH`
|
|
mountpoint=`sed -ne "s|^[^ ]*/$device ||; T; s/ .*//p" /proc/self/mounts`
|
|
|
|
case "$ACTION" in
|
|
add)
|
|
|
|
local from_fstab
|
|
local anon_mount
|
|
local anon_swap
|
|
local anon_fsck
|
|
local mds_mount_target
|
|
local mds_mount_device
|
|
local mds_mount_fstype
|
|
local sds_swap_device
|
|
local use_device
|
|
local do_fsck=0
|
|
local fsck_type
|
|
|
|
local autoswap_from_fstab
|
|
local automount_from_fstab
|
|
|
|
mount_dev_section_cb() {
|
|
mds_mount_target="$2"
|
|
mds_mount_device="$3"
|
|
mds_mount_fstype="$4"
|
|
mds_mount_enabled="$6"
|
|
}
|
|
|
|
swap_dev_section_cb() {
|
|
sds_swap_device="$2"
|
|
return 0
|
|
}
|
|
|
|
config_get_automount
|
|
automount_from_fstab="$from_fstab"
|
|
[ "$automount_from_fstab" -eq 1 ] && {
|
|
config_get_mount_section_by_device "/dev/$device"
|
|
use_device="$mds_mount_device"
|
|
[ "$mds_mount_enabled" -eq 1 ] && {
|
|
if [ -n "$mds_mount_target" ]; then
|
|
grep -q "/dev/$device" /proc/swaps || grep -q "/dev/$device" /proc/mounts || {
|
|
( mkdir -p "$mds_mount_target" && mount "$mds_mount_target" ) 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
|
|
}
|
|
else
|
|
logger -t 'fstab' "Mount enabled for $mds_mount_device but it doesn't have a defined mountpoint (target)"
|
|
fi
|
|
}
|
|
}
|
|
|
|
[ -z "$use_device" ] && {
|
|
config_get_autoswap
|
|
autoswap_from_fstab="$from_fstab"
|
|
|
|
[ "$autoswap_from_fstab" -eq 1 ] && {
|
|
config_get_swap_section_by_device "/dev/$device"
|
|
use_device="$sds_swap_device"
|
|
}
|
|
}
|
|
|
|
grep -q "/dev/$device" /proc/swaps || grep -q "/dev/$device" /proc/mounts || {
|
|
[ "$anon_mount" -eq 1 -a -z "$use_device" ] && {
|
|
case "$device" in
|
|
mtdblock*) ;;
|
|
*)
|
|
( mkdir -p /mnt/$device && mount /dev/$device /mnt/$device ) 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
|
|
;;
|
|
esac
|
|
}
|
|
}
|
|
reset_dev_section_cb
|
|
;;
|
|
remove)
|
|
umount /dev/$device
|
|
umount $mountpoint
|
|
;;
|
|
esac
|
|
|
|
fi
|
|
|