Add support for btrfs partition type in checkpoint & restore 02/260802/4
authorErnest Borowski <e.borowski@samsung.com>
Fri, 2 Jul 2021 21:59:26 +0000 (21:59 +0000)
committerErnest Borowski <e.borowski@samsung.com>
Fri, 30 Jul 2021 13:26:55 +0000 (13:26 +0000)
Change-Id: I7fb05550e0a80537facc47e47a9c3fa267a9c97b
Signed-off-by: Ernest Borowski <e.borowski@samsung.com>
upgrade/update-checkpoint-create.sh
upgrade/update.sh.in

index 4f8ba2a..cb614ec 100755 (executable)
@@ -12,7 +12,7 @@ STAT="/usr/bin/stat"
 
 SYSTEM_DATA_MNT="opt"
 USER_MNT="opt/usr"
-
+BTRFS="/usr/sbin/btrfs"
 
 get_partition_id() {
         PART_ROOTFS=$("$BLKID" --match-token PARTLABEL=rootfs -o device || "$BLKID" --match-token LABEL=rootfs -o device)
@@ -46,6 +46,16 @@ mount_f2fs_partition() {
         echo "[Debug] Mounted ${PARTITION} as F2FS checkpoint=disable"
 }
 
+mount_btrfs_partition() {
+        LABEL=${1}
+        PARTITION=${2}
+        DIRECTORY=${3}
+        "${MOUNT}" -o rw ${PARTITION} ${DIRECTORY}
+        mkdir -p "${DIRECTORY}/fota"
+        "$BTRFS" subvolume snapshot "$DIRECTORY" "$DIRECTORY/fota/RO_update"
+        echo "[Debug] Mounted ${PARTITION} as btrfs"
+}
+
 mount_checkpoint_partition() {
         LABEL=${1}
         PARTITION=${2}
@@ -56,6 +66,8 @@ mount_checkpoint_partition() {
                 mount_bow_partition ${LABEL} ${PARTITION} ${DIRECTORY}
         elif [ "${FSTYPE}" = "f2fs" ]; then
                 mount_f2fs_partition ${LABEL} ${PARTITION} ${DIRECTORY}
+        elif [ "${FSTYPE}" = "btrfs" ]; then
+                mount_btrfs_partition ${LABEL} ${PARTITION} ${DIRECTORY}
         else
                 mount ${PARTITION} ${DIRECTORY}
         fi
index 747b4bc..e2988f9 100755 (executable)
@@ -87,6 +87,28 @@ COMMIT_F2FS_PARTITION()
        NOTIFY "Changes on partition ${LABEL} commited (f2fs)"
 }
 
+DELETE_BTRFS_PARTITION() {
+       PART="$1"
+       MNT_POINT="$("$FINDMNT" "$PART" -o TARGET)"
+       if [ "$MNT_POINT" = "" ]; then
+               ERROR "Unable to find btrfs mountpoint for: $PART"
+               return
+       fi
+       NOTIFY "Deleting btrfs snapshot"
+       mount -o remount,rw "${MNT_POINT}"
+       btrfs subvolume delete "$MNT_POINT"/fota/RO_update
+       rm -rf "$MNT_POINT/fota/RO_update"
+}
+
+
+COMMIT_BTRFS_PARTITION()
+{
+       LABEL=${1}
+       PART_SYSTEM_DATA=$(blkid --match-token PARTLABEL="${LABEL}" -o device || blkid --match-token LABEL="${LABEL}" -o device)
+       DELETE_BTRFS_PARTITION "${PART_SYSTEM_DATA}"
+       NOTIFY "Changes on partition ${LABEL} commited (btrfs)"
+}
+
 COMMIT_PARTITION()
 {
        LABEL=${1}
@@ -102,6 +124,8 @@ COMMIT_PARTITION()
                COMMIT_BOW_PARTITION "${LABEL}"
        elif [ "${TYPE}" = "f2fs" ]; then
                COMMIT_F2FS_PARTITION "${LABEL}" ${PART_DEVICE}
+       elif [ "${TYPE}" = "btrfs" ]; then
+               COMMIT_BTRFS_PARTITION "${LABEL}"
        else
                ERROR "ERROR: Cannot commit ${LABEL}: Unsupported filesystem ${TYPE}"
        fi