From: Eric Biggers <ebiggers@google.com>
To: Theodore Ts'o <tytso@mit.edu>
Cc: fstests@vger.kernel.org, Eric Biggers <ebiggers@google.com>
Subject: [xfstests-bld PATCH] android-xfstests: support f2fs
Date: Thu, 29 Mar 2018 18:00:50 -0700 [thread overview]
Message-ID: <20180330010050.64034-1-ebiggers@google.com> (raw)
Make android-setup-partitions use 'blkid' to detect the type of the
userdata filesystem, and if it is f2fs calculate its size using fields
from the f2fs superblock.
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
.../test-appliance/android-setup-partitions | 55 +++++++++++++++++--
1 file changed, 50 insertions(+), 5 deletions(-)
diff --git a/kvm-xfstests/test-appliance/android-setup-partitions b/kvm-xfstests/test-appliance/android-setup-partitions
index 61cd001..8d38303 100755
--- a/kvm-xfstests/test-appliance/android-setup-partitions
+++ b/kvm-xfstests/test-appliance/android-setup-partitions
@@ -209,6 +209,49 @@ all_partitions_present()
return 0
}
+# Extract a little-endian binary field from a file or device.
+extract_binval()
+{
+ local file="$1"
+ local offset="$2"
+ local size="$3"
+
+ od "$file" -j $offset -N $size -t x$size -A none --endian=little \
+ | sed 's/^[[:space:]]*/0x/'
+}
+
+# Get the size of the filesystem on the specified device.
+get_fs_size()
+{
+ local device="$1" fstype="$2"
+
+ case "$fstype" in
+ ext4)
+ dumpe2fs -h "$device" 2>/dev/null | \
+ awk '/^Block count:/{blockcount=$3}
+ /^Block size:/{blocksize=$3}
+ END { print blockcount * blocksize }'
+ ;;
+ f2fs)
+ local super_offset=1024
+ local magic log_blocksize block_count
+
+ # see 'struct f2fs_super_block'
+ magic=$(extract_binval "$device" $super_offset 4)
+ log_blocksize=$(extract_binval "$device" $(( super_offset + 16 )) 4)
+ block_count=$(extract_binval "$device" $(( super_offset + 36 )) 8)
+
+ if (( magic != 0xF2F52010 )); then
+ die "f2fs superblock not found on \"$device\""
+ fi
+ echo $(( block_count * (1 << log_blocksize) ))
+ ;;
+ *)
+ die "unsupported filesystem type \"$fstype\" on \"$device\""
+ ;;
+ esac
+}
+
# Transiently shrink the userdata partition, as viewed by the kernel, if it's
# not fully used by the filesystem on it.
#
@@ -219,11 +262,10 @@ all_partitions_present()
# the end of the filesystem.
shrink_userdata_partition()
{
- local fs_size=$(dumpe2fs -h $USERDATA_FS_DEV 2>/dev/null | \
- awk '/^Block count:/{blockcount=$3}
- /^Block size:/{blocksize=$3}
- END { print blockcount * blocksize }')
- local part_size=$(get_partition_size $USERDATA_RAW_DEV)
+ local fs_size part_size
+
+ fs_size=$(get_fs_size "$USERDATA_FS_DEV" "$USERDATA_FS_TYPE")
+ part_size=$(get_partition_size "$USERDATA_RAW_DEV")
if (( fs_size <= 0 )); then
die "unable to determine size of userdata filesystem"
@@ -337,6 +379,9 @@ else
USERDATA_FS_DEV=$USERDATA_RAW_DEV
fi
+# Type of the userdata filesystem, e.g. ext4 or f2fs
+USERDATA_FS_TYPE=$(blkid -s TYPE -o value "$USERDATA_FS_DEV")
+
if ! all_partitions_present ; then
# Free up as much space as we can, then create the partitions.
shrink_userdata_partition
--
2.17.0.rc1.321.gba9d0f2565-goog
next reply other threads:[~2018-03-30 1:01 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-30 1:00 Eric Biggers [this message]
2018-04-02 0:24 ` [xfstests-bld PATCH] android-xfstests: support f2fs Theodore Y. Ts'o
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180330010050.64034-1-ebiggers@google.com \
--to=ebiggers@google.com \
--cc=fstests@vger.kernel.org \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.