1*10e915abSAdriana Kobylak#!/bin/sh 2*10e915abSAdriana Kobylak 3*10e915abSAdriana Kobylak# Get the mtd device number (mtdX) 4*10e915abSAdriana Kobylakfindmtd() { 5*10e915abSAdriana Kobylak m="$(grep -xl "$1" /sys/class/mtd/*/name)" 6*10e915abSAdriana Kobylak m="${m%/name}" 7*10e915abSAdriana Kobylak m="${m##*/}" 8*10e915abSAdriana Kobylak echo "${m}" 9*10e915abSAdriana Kobylak} 10*10e915abSAdriana Kobylak 11*10e915abSAdriana Kobylak# Get the ubi device number (ubiX_Y) 12*10e915abSAdriana Kobylakfindubi() { 13*10e915abSAdriana Kobylak u="$(grep -xl "$1" /sys/class/ubi/ubi?/subsystem/ubi*/name)" 14*10e915abSAdriana Kobylak u="${u%/name}" 15*10e915abSAdriana Kobylak u="${u##*/}" 16*10e915abSAdriana Kobylak echo "${u}" 17*10e915abSAdriana Kobylak} 18*10e915abSAdriana Kobylak 19*10e915abSAdriana Kobylak# Get the mount information 20*10e915abSAdriana Kobylakis_mounted() { 21*10e915abSAdriana Kobylak grep -q "$1" /proc/mounts 22*10e915abSAdriana Kobylak return $? 23*10e915abSAdriana Kobylak} 24*10e915abSAdriana Kobylak 25*10e915abSAdriana Kobylak# Attach the pnor mtd device to ubi. 26*10e915abSAdriana Kobylakattach_ubi() { 27*10e915abSAdriana Kobylak pnormtd="$(findmtd pnor)" 28*10e915abSAdriana Kobylak pnor="${pnormtd#mtd}" 29*10e915abSAdriana Kobylak pnordev="/dev/mtd${pnor}" 30*10e915abSAdriana Kobylak 31*10e915abSAdriana Kobylak if [ -d "/sys/class/ubi/ubi${pnor}" ]; then 32*10e915abSAdriana Kobylak # Already attached 33*10e915abSAdriana Kobylak return 0 34*10e915abSAdriana Kobylak fi 35*10e915abSAdriana Kobylak 36*10e915abSAdriana Kobylak ubiattach /dev/ubi_ctrl -m "${pnor}" -d "${pnor}" 37*10e915abSAdriana Kobylak rc=$? 38*10e915abSAdriana Kobylak if [ ${rc} -ne 0 ]; then 39*10e915abSAdriana Kobylak # Check the pnor mtd device is formatted as ubi by reading the first 3 byes, 40*10e915abSAdriana Kobylak # which should be the ascii chars 'UBI' 41*10e915abSAdriana Kobylak magic="$(hexdump -C -n 3 ${pnordev})" 42*10e915abSAdriana Kobylak if [[ "${magic}" =~ "UBI" ]]; then 43*10e915abSAdriana Kobylak # Device already formatted as ubi, ubiattach failed for some other reason 44*10e915abSAdriana Kobylak return ${rc} 45*10e915abSAdriana Kobylak else 46*10e915abSAdriana Kobylak # Format device as ubi 47*10e915abSAdriana Kobylak echo "Starting ubiformat ${pnordev}" 48*10e915abSAdriana Kobylak ubiformat "${pnordev}" -y -q 49*10e915abSAdriana Kobylak # Retry the ubiattach 50*10e915abSAdriana Kobylak ubiattach /dev/ubi_ctrl -m "${pnor}" -d "${pnor}" 51*10e915abSAdriana Kobylak fi 52*10e915abSAdriana Kobylak fi 53*10e915abSAdriana Kobylak} 54*10e915abSAdriana Kobylak 55*10e915abSAdriana Kobylakmount_squashfs() { 56*10e915abSAdriana Kobylak pnormtd="$(findmtd pnor)" 57*10e915abSAdriana Kobylak ubidev="/dev/ubi${pnormtd#mtd}" 58*10e915abSAdriana Kobylak mountdir="/media/${name}" 59*10e915abSAdriana Kobylak vol="$(findubi "${name}")" 60*10e915abSAdriana Kobylak img="/tmp/images/${version}/pnor.xz.squashfs" 61*10e915abSAdriana Kobylak filesize="$(ls -sh $img | awk -F " " {'print $1'})" 62*10e915abSAdriana Kobylak 63*10e915abSAdriana Kobylak if is_mounted "${name}"; then 64*10e915abSAdriana Kobylak echo "${name} is already mounted." 65*10e915abSAdriana Kobylak return 0 66*10e915abSAdriana Kobylak fi 67*10e915abSAdriana Kobylak 68*10e915abSAdriana Kobylak if [ ! -z "${vol}" ]; then 69*10e915abSAdriana Kobylak ubirmvol "${ubidev}" -N "${name}" 70*10e915abSAdriana Kobylak fi 71*10e915abSAdriana Kobylak 72*10e915abSAdriana Kobylak if [ ! -d "${mountdir}" ]; then 73*10e915abSAdriana Kobylak mkdir "${mountdir}" 74*10e915abSAdriana Kobylak fi 75*10e915abSAdriana Kobylak 76*10e915abSAdriana Kobylak # Set size of read-only partition equal to pnor.xz.squashfs 77*10e915abSAdriana Kobylak ubimkvol "${ubidev}" -N "${name}" -s "${filesize}"KiB --type=static 78*10e915abSAdriana Kobylak vol="$(findubi "${name}")" 79*10e915abSAdriana Kobylak 80*10e915abSAdriana Kobylak if [ $? != 0 ]; then 81*10e915abSAdriana Kobylak echo "Unable to create RO volume!" 82*10e915abSAdriana Kobylak return 1 83*10e915abSAdriana Kobylak fi 84*10e915abSAdriana Kobylak 85*10e915abSAdriana Kobylak ubidevid="${vol#ubi}" 86*10e915abSAdriana Kobylak ubiupdatevol "/dev/ubi${ubidevid}" "${img}" 87*10e915abSAdriana Kobylak 88*10e915abSAdriana Kobylak if [ $? != 0 ]; then 89*10e915abSAdriana Kobylak echo "Unable to update RO volume!" 90*10e915abSAdriana Kobylak return 1 91*10e915abSAdriana Kobylak fi 92*10e915abSAdriana Kobylak 93*10e915abSAdriana Kobylak ubiblock --create "/dev/ubi${ubidevid}" 94*10e915abSAdriana Kobylak 95*10e915abSAdriana Kobylak if [ $? != 0 ]; then 96*10e915abSAdriana Kobylak echo "Unable to create UBI block for RO volume!" 97*10e915abSAdriana Kobylak return 1 98*10e915abSAdriana Kobylak fi 99*10e915abSAdriana Kobylak 100*10e915abSAdriana Kobylak mount -t squashfs -o ro "/dev/ubiblock${ubidevid}" "${mountdir}" 101*10e915abSAdriana Kobylak 102*10e915abSAdriana Kobylak if [ $? != 0 ]; then 103*10e915abSAdriana Kobylak echo "Unable to mount RO volume!" 104*10e915abSAdriana Kobylak return 1 105*10e915abSAdriana Kobylak fi 106*10e915abSAdriana Kobylak} 107*10e915abSAdriana Kobylak 108*10e915abSAdriana Kobylakmount_ubi() { 109*10e915abSAdriana Kobylak pnormtd="$(findmtd pnor)" 110*10e915abSAdriana Kobylak pnor="${pnormtd#mtd}" 111*10e915abSAdriana Kobylak ubidev="/dev/ubi${pnor}" 112*10e915abSAdriana Kobylak pnordev="/dev/mtd${pnor}" 113*10e915abSAdriana Kobylak 114*10e915abSAdriana Kobylak if [[ "${name}" == "pnor-patch" ]]; then 115*10e915abSAdriana Kobylak if [[ "$(fw_printenv fieldmode 2>/dev/null)" == "fieldmode=true" ]]; then 116*10e915abSAdriana Kobylak return 0 117*10e915abSAdriana Kobylak fi 118*10e915abSAdriana Kobylak if [[ ! "$(hexdump -C -n 3 ${pnordev})" =~ "UBI" ]]; then 119*10e915abSAdriana Kobylak return 0 120*10e915abSAdriana Kobylak fi 121*10e915abSAdriana Kobylak mountdir="/usr/local/share/pnor" 122*10e915abSAdriana Kobylak else 123*10e915abSAdriana Kobylak mountdir="/media/${name}" 124*10e915abSAdriana Kobylak fi 125*10e915abSAdriana Kobylak 126*10e915abSAdriana Kobylak if [[ "${name}" == "pnor-prsv" ]]; then 127*10e915abSAdriana Kobylak size="2MiB" 128*10e915abSAdriana Kobylak else 129*10e915abSAdriana Kobylak size="16MiB" 130*10e915abSAdriana Kobylak fi 131*10e915abSAdriana Kobylak 132*10e915abSAdriana Kobylak if [ ! -d "${mountdir}" ]; then 133*10e915abSAdriana Kobylak mkdir -p "${mountdir}" 134*10e915abSAdriana Kobylak fi 135*10e915abSAdriana Kobylak 136*10e915abSAdriana Kobylak vol="$(findubi "${name}")" 137*10e915abSAdriana Kobylak if [ -z "${vol}" ]; then 138*10e915abSAdriana Kobylak ubimkvol "${ubidev}" -N "${name}" -s "${size}" 139*10e915abSAdriana Kobylak fi 140*10e915abSAdriana Kobylak 141*10e915abSAdriana Kobylak if ! is_mounted "${name}"; then 142*10e915abSAdriana Kobylak mountdev="ubi${pnor}:${name}" 143*10e915abSAdriana Kobylak mount -t ubifs "${mountdev}" "${mountdir}" 144*10e915abSAdriana Kobylak fi 145*10e915abSAdriana Kobylak} 146*10e915abSAdriana Kobylak 147*10e915abSAdriana Kobylakumount_ubi() { 148*10e915abSAdriana Kobylak pnormtd="$(findmtd pnor)" 149*10e915abSAdriana Kobylak pnor="${pnormtd#mtd}" 150*10e915abSAdriana Kobylak ubidev="/dev/ubi${pnor}" 151*10e915abSAdriana Kobylak mountdir="/media/${name}" 152*10e915abSAdriana Kobylak 153*10e915abSAdriana Kobylak if is_mounted "${name}"; then 154*10e915abSAdriana Kobylak umount "${mountdir}" 155*10e915abSAdriana Kobylak fi 156*10e915abSAdriana Kobylak 157*10e915abSAdriana Kobylak vol="$(findubi "${name}")" 158*10e915abSAdriana Kobylak id="${vol##*_}" 159*10e915abSAdriana Kobylak if [ -n "${id}" ]; then 160*10e915abSAdriana Kobylak ubirmvol "${ubidev}" -n "${id}" 161*10e915abSAdriana Kobylak fi 162*10e915abSAdriana Kobylak 163*10e915abSAdriana Kobylak if [ -d "${mountdir}" ]; then 164*10e915abSAdriana Kobylak rm -r "${mountdir}" 165*10e915abSAdriana Kobylak fi 166*10e915abSAdriana Kobylak} 167*10e915abSAdriana Kobylak 168*10e915abSAdriana Kobylakremount_ubi() { 169*10e915abSAdriana Kobylak pnormtd="$(findmtd pnor)" 170*10e915abSAdriana Kobylak pnor="${pnormtd#mtd}" 171*10e915abSAdriana Kobylak pnordev="/dev/mtd${pnor}" 172*10e915abSAdriana Kobylak 173*10e915abSAdriana Kobylak # Re-Attach the pnor mtd device to ubi 174*10e915abSAdriana Kobylak if [[ $(hexdump -C -n 3 ${pnordev}) =~ "UBI" ]]; then 175*10e915abSAdriana Kobylak ubiattach /dev/ubi_ctrl -m "${pnor}" -d "${pnor}" 176*10e915abSAdriana Kobylak else 177*10e915abSAdriana Kobylak # Device not formatted as ubi. 178*10e915abSAdriana Kobylak return 0 179*10e915abSAdriana Kobylak fi 180*10e915abSAdriana Kobylak 181*10e915abSAdriana Kobylak # Get information on all ubi volumes 182*10e915abSAdriana Kobylak ubinfo=$(ubinfo -d ${pnor}) 183*10e915abSAdriana Kobylak presentVolumes=${ubinfo##*:} 184*10e915abSAdriana Kobylak IFS=', ' read -r -a array <<< "$presentVolumes" 185*10e915abSAdriana Kobylak for element in ${array[@]}; 186*10e915abSAdriana Kobylak do 187*10e915abSAdriana Kobylak elementProperties=$(ubinfo -d $pnor -n $element) 188*10e915abSAdriana Kobylak # Get ubi volume name by getting rid of additional properties 189*10e915abSAdriana Kobylak name=${elementProperties#*Name:} 190*10e915abSAdriana Kobylak name="${name%Character*}" 191*10e915abSAdriana Kobylak name="$(echo -e "${name}" | tr -d '[:space:]')" 192*10e915abSAdriana Kobylak 193*10e915abSAdriana Kobylak if [[ ${name} == pnor-prsv ]] || [[ ${name} == pnor-rw* ]] || [[ ${name} == pnor-ro* ]]; then 194*10e915abSAdriana Kobylak mountdir="/media/${name}" 195*10e915abSAdriana Kobylak if [ ! -d "${mountdir}" ]; then 196*10e915abSAdriana Kobylak mkdir -p "${mountdir}" 197*10e915abSAdriana Kobylak fi 198*10e915abSAdriana Kobylak 199*10e915abSAdriana Kobylak if [[ ${name} == pnor-ro* ]] 200*10e915abSAdriana Kobylak then 201*10e915abSAdriana Kobylak ubiblock --create /dev/ubi${pnor}_${element} 202*10e915abSAdriana Kobylak mount -t squashfs -o ro "/dev/ubiblock${pnor}_${element}" "${mountdir}" 203*10e915abSAdriana Kobylak else 204*10e915abSAdriana Kobylak mount -t ubifs "ubi${pnor}:${name}" "${mountdir}" 205*10e915abSAdriana Kobylak fi 206*10e915abSAdriana Kobylak fi 207*10e915abSAdriana Kobylak done 208*10e915abSAdriana Kobylak} 209*10e915abSAdriana Kobylak 210*10e915abSAdriana Kobylakupdate_symlinks() { 211*10e915abSAdriana Kobylak PNOR_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/" 212*10e915abSAdriana Kobylak PNOR_RO_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/ro" 213*10e915abSAdriana Kobylak PNOR_RO_PREFIX="/media/pnor-ro-" 214*10e915abSAdriana Kobylak PNOR_RW_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/rw" 215*10e915abSAdriana Kobylak PNOR_RW_PREFIX="/media/pnor-rw-" 216*10e915abSAdriana Kobylak PNOR_PRSV_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/prsv" 217*10e915abSAdriana Kobylak PNOR_PRSV="/media/pnor-prsv" 218*10e915abSAdriana Kobylak PERSISTENCE_PATH="/var/lib/obmc/openpower-pnor-code-mgmt/" 219*10e915abSAdriana Kobylak PNOR_PATCH_LOCATION="/usr/local/share/pnor/" 220*10e915abSAdriana Kobylak 221*10e915abSAdriana Kobylak # Get a list of all active PNOR versions 222*10e915abSAdriana Kobylak data="$(ls -d ${PNOR_RO_PREFIX}*)" 223*10e915abSAdriana Kobylak IFS=$'\n' array=(${data}) 224*10e915abSAdriana Kobylak 225*10e915abSAdriana Kobylak currentVersion="" 226*10e915abSAdriana Kobylak lowestPriority=255 227*10e915abSAdriana Kobylak for element in ${array[@]}; do 228*10e915abSAdriana Kobylak #Remove the PNOR_RO_PREFIX from the path to get version ID. 229*10e915abSAdriana Kobylak versionId="${element#${PNOR_RO_PREFIX}}" 230*10e915abSAdriana Kobylak 231*10e915abSAdriana Kobylak # Get the priority of active versions from persistence files. 232*10e915abSAdriana Kobylak if [[ -f "${PERSISTENCE_PATH}${versionId}" ]]; then 233*10e915abSAdriana Kobylak data="$(grep -r "priority" ${PERSISTENCE_PATH}${versionId})" 234*10e915abSAdriana Kobylak priority="${data: -1}" 235*10e915abSAdriana Kobylak if [[ priority -le lowestPriority ]]; then 236*10e915abSAdriana Kobylak lowestPriority=${priority} 237*10e915abSAdriana Kobylak currentVersion=${versionId} 238*10e915abSAdriana Kobylak fi 239*10e915abSAdriana Kobylak fi 240*10e915abSAdriana Kobylak done 241*10e915abSAdriana Kobylak 242*10e915abSAdriana Kobylak # Return if no active version found 243*10e915abSAdriana Kobylak if [ -z $currentVersion ]; then 244*10e915abSAdriana Kobylak return 0; 245*10e915abSAdriana Kobylak fi 246*10e915abSAdriana Kobylak 247*10e915abSAdriana Kobylak if [ ! -d "${PNOR_ACTIVE_PATH}" ]; then 248*10e915abSAdriana Kobylak mkdir -p "${PNOR_ACTIVE_PATH}" 249*10e915abSAdriana Kobylak fi 250*10e915abSAdriana Kobylak 251*10e915abSAdriana Kobylak # If the RW or RO active links doesn't point to the version with 252*10e915abSAdriana Kobylak # lowest priority, then remove the symlink and create new ones. 253*10e915abSAdriana Kobylak if [[ $(readlink -f "${PNOR_RO_ACTIVE_PATH}") != ${PNOR_RO_PREFIX}${currentVersion} ]]; then 254*10e915abSAdriana Kobylak rm -f ${PNOR_RO_ACTIVE_PATH} 255*10e915abSAdriana Kobylak rm -rf ${PNOR_PATCH_LOCATION}* 256*10e915abSAdriana Kobylak ln -sfv ${PNOR_RO_PREFIX}${currentVersion} ${PNOR_RO_ACTIVE_PATH} 257*10e915abSAdriana Kobylak fi 258*10e915abSAdriana Kobylak 259*10e915abSAdriana Kobylak if [[ $(readlink -f "${PNOR_RW_ACTIVE_PATH}") != ${PNOR_RW_PREFIX}${currentVersion} ]]; then 260*10e915abSAdriana Kobylak rm -f ${PNOR_RW_ACTIVE_PATH} 261*10e915abSAdriana Kobylak ln -sfv ${PNOR_RW_PREFIX}${currentVersion} ${PNOR_RW_ACTIVE_PATH} 262*10e915abSAdriana Kobylak fi 263*10e915abSAdriana Kobylak 264*10e915abSAdriana Kobylak if [[ ! -h ${PNOR_PRSV_ACTIVE_PATH} ]]; then 265*10e915abSAdriana Kobylak ln -sfv ${PNOR_PRSV} ${PNOR_PRSV_ACTIVE_PATH} 266*10e915abSAdriana Kobylak fi 267*10e915abSAdriana Kobylak} 268*10e915abSAdriana Kobylak 269*10e915abSAdriana Kobylakubi_cleanup() { 270*10e915abSAdriana Kobylak # When ubi_cleanup is run, it expects one or no active version. 271*10e915abSAdriana Kobylak activeVersion=$(busctl --list --no-pager tree \ 272*10e915abSAdriana Kobylak org.open_power.Software.Host.Updater | \ 273*10e915abSAdriana Kobylak grep /xyz/openbmc_project/software/ | tail -c 9) 274*10e915abSAdriana Kobylak 275*10e915abSAdriana Kobylak if [[ -z "$activeVersion" ]]; then 276*10e915abSAdriana Kobylak vols=$(ubinfo -a | grep -e "pnor-ro-" -e "pnor-rw-" | cut -c 14-) 277*10e915abSAdriana Kobylak vols=(${vols}) 278*10e915abSAdriana Kobylak else 279*10e915abSAdriana Kobylak vols=$(ubinfo -a | grep -e "pnor-ro-" -e "pnor-rw-" | \ 280*10e915abSAdriana Kobylak grep -v "$activeVersion" | cut -c 14-) 281*10e915abSAdriana Kobylak vols=(${vols}) 282*10e915abSAdriana Kobylak fi 283*10e915abSAdriana Kobylak 284*10e915abSAdriana Kobylak for (( index=0; index<${#vols[@]}; index++ )); do 285*10e915abSAdriana Kobylak name=${vols[index]} 286*10e915abSAdriana Kobylak umount_ubi 287*10e915abSAdriana Kobylak done 288*10e915abSAdriana Kobylak} 289*10e915abSAdriana Kobylak 290*10e915abSAdriana Kobylakclear_volatile() { 291*10e915abSAdriana Kobylak service=$(mapper get-service /org/open_power/control/volatile) 292*10e915abSAdriana Kobylak clearVolatileEnabled=$(busctl get-property $service /org/open_power/control/volatile xyz.openbmc_project.Object.Enable Enabled) 293*10e915abSAdriana Kobylak if [[ "$clearVolatileEnabled" != "b true" ]]; then 294*10e915abSAdriana Kobylak return 0 295*10e915abSAdriana Kobylak fi 296*10e915abSAdriana Kobylak 297*10e915abSAdriana Kobylak PNOR_TOC_FILE="pnor.toc" 298*10e915abSAdriana Kobylak PNOR_RO_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/ro/" 299*10e915abSAdriana Kobylak PNOR_RW_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/rw/" 300*10e915abSAdriana Kobylak PNOR_PRSV_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/prsv/" 301*10e915abSAdriana Kobylak 302*10e915abSAdriana Kobylak # toc partition string format: 303*10e915abSAdriana Kobylak # partition27=HB_VOLATILE,0x02ba9000,0x02bae000,00,ECC,VOLATILE,READWRITE 304*10e915abSAdriana Kobylak tocFilePath="${PNOR_RO_ACTIVE_PATH}${PNOR_TOC_FILE}" 305*10e915abSAdriana Kobylak volatiles=($(grep VOLATILE "${tocFilePath}" | grep -Eo '^partition([0-9]+)=([A-Za-z0-9_]+)')) 306*10e915abSAdriana Kobylak for (( index=0; index<${#volatiles[@]}; index++ )); do 307*10e915abSAdriana Kobylak volatileName="$(echo ${volatiles[${index}]} | awk -F '=' '{print $2}')" 308*10e915abSAdriana Kobylak 309*10e915abSAdriana Kobylak rwVolatile="${PNOR_RW_ACTIVE_PATH}${volatileName}" 310*10e915abSAdriana Kobylak if [ -f "${rwVolatile}" ]; then 311*10e915abSAdriana Kobylak echo "Clear $rwVolatile" 312*10e915abSAdriana Kobylak rm "${rwVolatile}" 313*10e915abSAdriana Kobylak fi 314*10e915abSAdriana Kobylak prsvVolatile="${PNOR_PRSV_ACTIVE_PATH}${volatileName}" 315*10e915abSAdriana Kobylak if [ -f "${prsvVolatile}" ]; then 316*10e915abSAdriana Kobylak echo "Clear $prsvVolatile" 317*10e915abSAdriana Kobylak rm "${prsvVolatile}" 318*10e915abSAdriana Kobylak fi 319*10e915abSAdriana Kobylak done 320*10e915abSAdriana Kobylak # Always reset the sensor after clearing 321*10e915abSAdriana Kobylak busctl set-property $service /org/open_power/control/volatile xyz.openbmc_project.Object.Enable Enabled b false 322*10e915abSAdriana Kobylak} 323*10e915abSAdriana Kobylak 324*10e915abSAdriana Kobylakcase "$1" in 325*10e915abSAdriana Kobylak ubiattach) 326*10e915abSAdriana Kobylak attach_ubi 327*10e915abSAdriana Kobylak ;; 328*10e915abSAdriana Kobylak squashfsmount) 329*10e915abSAdriana Kobylak name="$2" 330*10e915abSAdriana Kobylak version="$3" 331*10e915abSAdriana Kobylak mount_squashfs 332*10e915abSAdriana Kobylak ;; 333*10e915abSAdriana Kobylak ubimount) 334*10e915abSAdriana Kobylak name="$2" 335*10e915abSAdriana Kobylak mount_ubi 336*10e915abSAdriana Kobylak ;; 337*10e915abSAdriana Kobylak ubiumount) 338*10e915abSAdriana Kobylak name="$2" 339*10e915abSAdriana Kobylak umount_ubi 340*10e915abSAdriana Kobylak ;; 341*10e915abSAdriana Kobylak ubiremount) 342*10e915abSAdriana Kobylak remount_ubi 343*10e915abSAdriana Kobylak ;; 344*10e915abSAdriana Kobylak updatesymlinks) 345*10e915abSAdriana Kobylak update_symlinks 346*10e915abSAdriana Kobylak ;; 347*10e915abSAdriana Kobylak ubicleanup) 348*10e915abSAdriana Kobylak ubi_cleanup 349*10e915abSAdriana Kobylak ;; 350*10e915abSAdriana Kobylak clearvolatile) 351*10e915abSAdriana Kobylak clear_volatile 352*10e915abSAdriana Kobylak ;; 353*10e915abSAdriana Kobylak *) 354*10e915abSAdriana Kobylak echo "Invalid argument" 355*10e915abSAdriana Kobylak exit 1 356*10e915abSAdriana Kobylak ;; 357*10e915abSAdriana Kobylakesac 358*10e915abSAdriana Kobylakrc=$? 359*10e915abSAdriana Kobylakif [ ${rc} -ne 0 ]; then 360*10e915abSAdriana Kobylak echo "$0: error ${rc}" 361*10e915abSAdriana Kobylak exit ${rc} 362*10e915abSAdriana Kobylakfi 363