diff options
| -rw-r--r-- | meta/recipes-core/udev/udev-extraconf/mount.sh | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh b/meta/recipes-core/udev/udev-extraconf/mount.sh index c4695ee27d..537828e3e3 100644 --- a/meta/recipes-core/udev/udev-extraconf/mount.sh +++ b/meta/recipes-core/udev/udev-extraconf/mount.sh | |||
| @@ -45,6 +45,13 @@ automount_systemd() { | |||
| 45 | return | 45 | return |
| 46 | fi | 46 | fi |
| 47 | 47 | ||
| 48 | # Only go for auto-mounting when the device has been cleaned up in remove | ||
| 49 | # or has not been identified yet | ||
| 50 | if [ -e "/tmp/.automount-$name" ]; then | ||
| 51 | logger "mount.sh/automount" "[$MOUNT_BASE/$name] is already cached" | ||
| 52 | return | ||
| 53 | fi | ||
| 54 | |||
| 48 | # Skip the partition which are already in /etc/fstab | 55 | # Skip the partition which are already in /etc/fstab |
| 49 | grep "^[[:space:]]*$DEVNAME" /etc/fstab && return | 56 | grep "^[[:space:]]*$DEVNAME" /etc/fstab && return |
| 50 | for n in LABEL PARTLABEL UUID PARTUUID; do | 57 | for n in LABEL PARTLABEL UUID PARTUUID; do |
| @@ -100,6 +107,13 @@ automount() { | |||
| 100 | # Get the unique name for mount point | 107 | # Get the unique name for mount point |
| 101 | get_label_name "${DEVNAME}" | 108 | get_label_name "${DEVNAME}" |
| 102 | 109 | ||
| 110 | # Only go for auto-mounting when the device has been cleaned up in remove | ||
| 111 | # or has not been identified yet | ||
| 112 | if [ -e "/tmp/.automount-$name" ]; then | ||
| 113 | logger "mount.sh/automount" "[$MOUNT_BASE/$name] is already cached" | ||
| 114 | return | ||
| 115 | fi | ||
| 116 | |||
| 103 | ! test -d "$MOUNT_BASE/$name" && mkdir -p "$MOUNT_BASE/$name" | 117 | ! test -d "$MOUNT_BASE/$name" && mkdir -p "$MOUNT_BASE/$name" |
| 104 | # Silent util-linux's version of mounting auto | 118 | # Silent util-linux's version of mounting auto |
| 105 | if [ "x`readlink $MOUNT`" = "x/bin/mount.util-linux" ] ; | 119 | if [ "x`readlink $MOUNT`" = "x/bin/mount.util-linux" ] ; |
| @@ -172,12 +186,18 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && [ -n "$ID_FS_TYPE" -o "$media_t | |||
| 172 | fi | 186 | fi |
| 173 | 187 | ||
| 174 | if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then | 188 | if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then |
| 175 | for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " ` | ||
| 176 | do | ||
| 177 | $UMOUNT $mnt | ||
| 178 | done | ||
| 179 | |||
| 180 | # Remove empty directories from auto-mounter | ||
| 181 | name="`basename "$DEVNAME"`" | 189 | name="`basename "$DEVNAME"`" |
| 182 | test -e "/tmp/.automount-$name" && rm_dir "$MOUNT_BASE/$name" | 190 | tmpfile=`find /tmp | grep "\.automount-.*${name}$"` |
| 191 | if [ ! -e "/sys/$DEVPATH" -a -e "$tmpfile" ]; then | ||
| 192 | logger "mount.sh/remove" "cleaning up $DEVNAME, was mounted by the auto-mounter" | ||
| 193 | for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " ` | ||
| 194 | do | ||
| 195 | $UMOUNT $mnt | ||
| 196 | done | ||
| 197 | # Remove mount directory created by the auto-mounter | ||
| 198 | # and clean up our tmp cache file | ||
| 199 | mntdir=`cat "$tmpfile"` | ||
| 200 | rm_dir "$MOUNT_BASE/$mntdir" | ||
| 201 | rm "$tmpfile" | ||
| 202 | fi | ||
| 183 | fi | 203 | fi |
