fi
}
+IS_MOUNT_RO()
+{
+ PART_PATH="$1"
+ if ! grep "$PART_PATH" /proc/mounts | \
+ awk '{print $4}' | \
+ awk -F',' '{for(i=1; i<=NF; i++) {if ($i == "ro") {found=1; exit}}} END {exit found}'; then
+
+ ERROR "Partition $PART_PATH is mounted as RO, probably due to an error"
+ return 1
+ fi
+ return 0
+}
+
COMMIT_BOW_PARTITION()
{
LABEL=${1}
BOWDEV_PATH=/dev/mapper/bowdev_${LABEL}
+
+ if ! IS_MOUNT_RO "$BOWDEV_PATH"; then
+ # If the partition is in read-only mode, it is most likely that
+ # an dm-bow error occurred as a result of insufficient free
+ # space. Therefore, the upgrade must be considered unsuccessful.
+ return 1
+ fi
+
DM_NUMBER=$(($("${STAT}" -c "0x%T" $(readlink -f ${BOWDEV_PATH}))))
echo 2 > /sys/block/dm-${DM_NUMBER}/bow/state
NOTIFY "Changes on partition ${LABEL} commited (dm-bow)"
+ return 0
}
COMMIT_F2FS_PARTITION()
LABEL=${1}
PART_DEVICE=${2}
- mount -o remount,checkpoint=enable "${PART_DEVICE}"
- NOTIFY "Changes on partition ${LABEL} commited (f2fs)"
+ if mount -o remount,checkpoint=enable "${PART_DEVICE}"; then
+ NOTIFY "Changes on partition ${LABEL} commited (f2fs)"
+ return 0
+ else
+ ERROR "Error when commit changes on partition ${LABEL} (f2fs)"
+ return 1
+ fi
}
DELETE_BTRFS_PARTITION() {
MNT_POINT="$("$FINDMNT" "$PART" -o TARGET)"
if [ "$MNT_POINT" = "" ]; then
ERROR "Unable to find btrfs mountpoint for: $PART"
- return
+ return 1
fi
NOTIFY "Deleting btrfs snapshot"
umount "${MNT_POINT}"
rm -rf "$MNT_POINT/fota/RO_update"
umount "${MOUNT_POINT}"
mount -o rw "${PART}" "${MNT_POINT}"
+ return 0
}
{
LABEL=${1}
PART_SYSTEM_DATA=$(blkid --match-token PARTLABEL="${LABEL}" -o device -l || blkid --match-token LABEL="${LABEL}" -o device -l)
- DELETE_BTRFS_PARTITION "${PART_SYSTEM_DATA}"
- NOTIFY "Changes on partition ${LABEL} commited (btrfs)"
+ if DELETE_BTRFS_PARTITION "${PART_SYSTEM_DATA}"; then
+ NOTIFY "Changes on partition ${LABEL} commited (btrfs)"
+ return 0
+ fi
+
+ return 1
}
COMMIT_PARTITION()
PART_DEVICE=$(blkid --match-token PARTLABEL="${LABEL}" -o device -l || blkid --match-token LABEL="${LABEL}" -o device -l)
if [ -z "${PART_DEVICE}" ]; then
NOTIFY "WARNING: Partition ${LABEL} not found"
- return
+ return 0
fi
TYPE=$(blkid ${PART_DEVICE} -o value -s TYPE | tail -n 1)
else
ERROR "ERROR: Cannot commit ${LABEL}: Unsupported filesystem ${TYPE}"
fi
+ return $?
}
COMMIT_CHANGES()
{
- COMMIT_PARTITION system-data
- COMMIT_PARTITION user
+ if ! COMMIT_PARTITION system-data; then
+ return 1
+ fi
+ if ! COMMIT_PARTITION user; then
+ return 1
+ fi
+
+ return 0
}