Skip to content

Commit

Permalink
Improve the handling of block devices with '/' in their names.
Browse files Browse the repository at this point in the history
  • Loading branch information
msuhanov committed Jan 30, 2016
1 parent 6fecf68 commit f9031db
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 1 deletion.
2 changes: 1 addition & 1 deletion userspace/initramfs/01wrtblk_all
@@ -1,7 +1,7 @@
#!/bin/sh

# Mark all available block devices as read-only (except loop devices)
for device in /dev/*; do
for device in /dev/* /dev/*/*; do
if [ ! -h "$device" ] && [ -b "$device" ] && [ ! -z ${device##/dev/loop*} ]; then
# Check if medium is present
if blockdev --getsz "$device" > /dev/null 2>&1; then
Expand Down
2 changes: 2 additions & 0 deletions userspace/tools/wrtblk
Expand Up @@ -9,9 +9,11 @@ bdev="$1"
blockdev --setro "/dev/$bdev" || logger "wrtblk: blockdev --setro /dev/$bdev failed!"

# Mark a parent block device as read-only
bdev=$(echo "$bdev" | sed 's/\//!/g')
syspath=$(echo /sys/block/*/"$bdev")
[ "$syspath" = "/sys/block/*/$bdev" ] && exit
dir=${syspath%/*}
parent=${dir##*/}
parent=$(echo "$parent" | sed 's/!/\//g')
[ -b "/dev/$parent" ] || exit
blockdev --setro "/dev/$parent" || logger "wrtblk: blockdev --setro /dev/$parent failed!"
2 changes: 2 additions & 0 deletions userspace/tools/wrtblk-disable
Expand Up @@ -9,9 +9,11 @@ bdev="$1"
blockdev --setrw "/dev/$bdev" || logger "wrtblk: blockdev --setrw /dev/$bdev failed!"

# Mark a parent block device as read-write
bdev=$(echo "$bdev" | sed 's/\//!/g')
syspath=$(echo /sys/block/*/"$bdev")
[ "$syspath" = "/sys/block/*/$bdev" ] && exit
dir=${syspath%/*}
parent=${dir##*/}
parent=$(echo "$parent" | sed 's/!/\//g')
[ -b "/dev/$parent" ] || exit
blockdev --setrw "/dev/$parent" || logger "wrtblk: blockdev --setrw /dev/$parent failed!"
2 changes: 2 additions & 0 deletions userspace/tools/wrtblk-ioerr
Expand Up @@ -9,10 +9,12 @@ bdev="$1"
blockdev --setro "/dev/$bdev" || logger "wrtblk: blockdev --setro /dev/$bdev failed!"

# Mark all child block devices as read-only
bdev=$(echo "$bdev" | sed 's/\//!/g')
for child in /sys/block/"$bdev"/*/dev; do
dir=${child%/*}
partition=${dir##*/}
[ "$partition" = '*' ] && break
partition=$(echo "$partition" | sed 's/!/\//g')
[ -b "/dev/$partition" ] || continue
blockdev --setro "/dev/$partition" || logger "wrtblk: blockdev --setro /dev/$partition failed!"
done

0 comments on commit f9031db

Please sign in to comment.