Skip to content

Commit

Permalink
Fix the mount issue for openSUSE 15.3
Browse files Browse the repository at this point in the history
  • Loading branch information
ventoy committed Jul 26, 2022
1 parent 58c6314 commit bfaf068
Showing 1 changed file with 55 additions and 8 deletions.
63 changes: 55 additions & 8 deletions commonfunc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,20 @@ ventoy_check_insmod() {

ventoy_do_dm_patch() {
ventoy_log 'ventoy_do_dm_patch'
if [ -f /tmp/dm_patch.ko ]; then
if grep -q 'dm_patch' /proc/modules; then
ventoy_log "dm_patch already exist"
else
ventoy_log "dm_patch reinstall"
insmod /tmp/dm_patch.ko >>/tmp/vtoy.log 2>&1
if grep -q 'dm_patch' /proc/modules; then
ventoy_log "dm_patch reinstall success"
else
ventoy_log "dm_patch reinstall failed"
fi
fi
return
fi

if [ -f /bin/vtoydump ]; then
vtHeadSize=$(stat -c '%s' /bin/vtoydump)
Expand All @@ -55,11 +69,19 @@ ventoy_do_dm_patch() {

cat /proc/kallsyms | sort > /tmp/kallsyms

vtLine=$(vtoytool vtoyksym dm_get_table_device /tmp/kallsyms)
if grep -m1 -q 'open_table_device.isra' /tmp/kallsyms; then
vtLine=$(vtoytool vtoyksym open_table_device.isra /tmp/kallsyms)
else
vtLine=$(vtoytool vtoyksym dm_get_table_device /tmp/kallsyms)
fi
get_addr=$(echo $vtLine | awk '{print $1}')
get_size=$(echo $vtLine | awk '{print $2}')

vtLine=$(vtoytool vtoyksym dm_put_table_device /tmp/kallsyms)
if grep -m1 -q 'close_table_device.isra' /tmp/kallsyms; then
vtLine=$(vtoytool vtoyksym close_table_device.isra /tmp/kallsyms)
else
vtLine=$(vtoytool vtoyksym dm_put_table_device /tmp/kallsyms)
fi
put_addr=$(echo $vtLine | awk '{print $1}')
put_size=$(echo $vtLine | awk '{print $2}')

Expand All @@ -71,11 +93,14 @@ ventoy_do_dm_patch() {
if [ "$VTOY_DEBUG_LEVEL" = "01" ]; then
printk_addr=$(grep ' printk$' /proc/kallsyms | awk '{print $1}')
vtDebug="-v"
elif grep -q "vtdebug" /proc/cmdline; then
printk_addr=$(grep ' printk$' /proc/kallsyms | awk '{print $1}')
vtDebug="-v"
else
printk_addr=0
fi

#printk_addr=$(grep ' printk$' /proc/kallsyms | $AWK '{print $1}')
#printk_addr=$(grep ' printk$' /proc/kallsyms | awk '{print $1}')
#vtDebug="-v"

ventoy_log get_addr=$get_addr get_size=$get_size
Expand Down Expand Up @@ -108,6 +133,7 @@ ventoy_do_dm_patch() {
fi

vtModName=$(basename $vtModPath)
[ -f /tmp/$vtModName ] && rm -f /tmp/$vtModName

ventoy_log "template module is $vtModPath $vtModName"

Expand All @@ -126,14 +152,14 @@ ventoy_do_dm_patch() {
fi

#step1: modify vermagic/mod crc/relocation
vtoytool vtoykmod -u /tmp/dm_patch.ko /tmp/$vtModName $vtDebug
vtoytool vtoykmod -u /tmp/dm_patch.ko /tmp/$vtModName $vtDebug >>/tmp/vtoy.log 2>&1

#step2: fill parameters
vtPgsize=$(vtoytool vtoyksym -p)
vtoytool vtoykmod -f /tmp/dm_patch.ko $vtPgsize 0x$printk_addr 0x$ro_addr 0x$rw_addr $get_addr $get_size $put_addr $put_size 0x$kprobe_reg_addr 0x$kprobe_unreg_addr $vtDebug
vtoytool vtoykmod -f /tmp/dm_patch.ko $vtPgsize 0x$printk_addr 0x$ro_addr 0x$rw_addr $get_addr $get_size $put_addr $put_size 0x$kprobe_reg_addr 0x$kprobe_unreg_addr $vtDebug >>/tmp/vtoy.log 2>&1

ventoy_check_insmod
insmod /tmp/dm_patch.ko
insmod /tmp/dm_patch.ko >>/tmp/vtoy.log 2>&1

if grep -q 'dm_patch' /proc/modules; then
ventoy_log "dm_patch success"
Expand All @@ -148,13 +174,34 @@ ventoy_dm_patch_proc_begin() {
export vtLevel3=$(cat /proc/sys/kernel/printk | awk '{print $3}')
export vtLevel4=$(cat /proc/sys/kernel/printk | awk '{print $4}')

ventoy_do_dm_patch

#suppress printk message
echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
fi
}

ventoy_dm_patch_install() {
if ventoy_need_dm_patch; then
ventoy_do_dm_patch
fi
}

ventoy_dm_patch_remove() {
if ventoy_need_dm_patch; then
if grep -q 'dm_patch' /proc/modules; then
ventoy_log "remove dm_patch"
rmmod dm_patch
fi
fi
}

ventoy_dm_create_ventoy() {
ventoy_dm_patch_install
dmsetup create ventoy /ventoy_table
vret=$?
ventoy_dm_patch_remove
return $vret
}

ventoy_dm_patch_proc_end() {
if ventoy_need_dm_patch; then
#recover printk level
Expand Down

0 comments on commit bfaf068

Please sign in to comment.