[PATCH 2/2] android-xfstests: update documentation

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



From: Eric Biggers <ebiggers@xxxxxxxxxx>

Update the list of known issues, document that specifying a kernel works
now, and make a few other small improvements.

Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx>
---
 Documentation/android-xfstests.md | 142 +++++++++++++++++++++-----------------
 1 file changed, 79 insertions(+), 63 deletions(-)

diff --git a/Documentation/android-xfstests.md b/Documentation/android-xfstests.md
index a93b35c..772356e 100644
--- a/Documentation/android-xfstests.md
+++ b/Documentation/android-xfstests.md
@@ -18,8 +18,8 @@ devices.  If you encounter a problem, please submit a fix!
 
 - The android-xfstests script installed:
   run `make android-xfstests.sh` in the top-level directory of
-  xfstests-bld, then move android-xfstests.sh to
-  ~/bin/android-xfstests or another location on your $PATH.
+  xfstests-bld, then move `android-xfstests.sh` to
+  `~/bin/android-xfstests` or another location on your `$PATH`.
 
 - A rooted Android device with sufficient internal storage.  For most
   test configurations, about 24 GiB of internal storage should be
@@ -33,24 +33,25 @@ devices.  If you encounter a problem, please submit a fix!
 
 - An armhf Debian root filesystem set up with xfstests and the
   xfstests-bld scripts.  Either fetch the prebuilt
-  armhf_root_fs.tar.gz from
+  `armhf_root_fs.tar.gz` from
   [kernel.org](http://www.kernel.org/pub/linux/kernel/people/tytso/kvm-xfstests),
   or build one yourself on a Debian ARM build server as described in
   [building-xfstests](building-xfstests.md).  Then, either put the
   chroot tarball in the default location of
-  kvm-xfstests/test-appliance/armhf_root_fs.tar.gz, or specify it with
-  ROOT_FS in your ~/.config/android-xfstests or the -I option to
-  android-xfstests.
+  `kvm-xfstests/test-appliance/armhf_root_fs.tar.gz`, or specify it
+  with `ROOT_FS` in your `~/.config/android-xfstests` or the `-I`
+  option to android-xfstests.
 
 ## Procedure
 
 ### (Optional) Build a custom kernel
 
-You may be able to run xfstests with the kernel already installed on
-your device, but you may wish to build your own kernel instead.  The
-exact procedure for building the kernel is device-dependent, but here
-are example commands for building a kernel using the public source
-code for the Google Pixel phone (2016 edition), code name "marlin":
+You should be able to run xfstests with the kernel already installed
+on your device, but you may wish to build your own kernel instead.
+The exact procedure for building the kernel is device-dependent, but
+here are example commands for building a kernel using the public
+source code for the Google Pixel phone (2016 edition), code name
+"marlin":
 
     git clone https://android.googlesource.com/kernel/msm msm-linux
     cd msm-linux
@@ -60,36 +61,43 @@ code for the Google Pixel phone (2016 edition), code name "marlin":
     make marlin_defconfig
     make -j$(grep -c processor /proc/cpuinfo)
 
-This will produce a kernel image arch/arm64/boot/Image.gz-dtb.
+This will produce a kernel image `arch/arm64/boot/Image.gz-dtb`.
 
 Also consider the following config options:
 
-    CONFIG_SYSV_IPC=y
-        Makes some tests using dm-setup stop failing.
+* `CONFIG_SYSV_IPC=y`:  Makes several tests stop failing / being
+  skipped (see [Known issues](#known-issues))
 
-    CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=n
-        Include crypto self-tests.  This may be useful if you are
-        using xfstests to test file-based encryption.
+* `CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=n`: Include crypto self-tests.
+  This may be useful if you are using xfstests to test file-based
+  encryption.
 
 ### (Optional) Boot into your custom kernel
 
-To boot into your new kernel, you'll first need to reboot your device
-into fastboot mode by running 'adb reboot-bootloader' or by holding a
-device-dependent key combination (e.g. Power + Vol-Down on the Pixel).
-Then do *one* of the following:
-
-- Run 'fastboot boot arch/arm64/boot/Image.gz-dtb' to boot the kernel
-  directly.  Careful: this is good for one boot only (it's not
-  persistent), and it doesn't work on all devices.
-
-- Build and flash a boot.img to your device's boot partition.  This is
-  device-dependent, but for "marlin" devices one would copy
-  arch/arm64/boot/Image.gz-dtb into device/google/marlin-kernel/ in
-  the Android source tree, then run the following commands from the
-  root of the Android source tree:
+By default, android-xfstests uses the kernel running on the device.
+However, it also supports booting a kernel automatically.  To do this,
+specify `KERNEL` in your `~/.config/android-xfstests` or use the
+`--kernel` command line option.  If a kernel is specified,
+android-xfstests will boot it on the device using `fastboot boot`.  As
+an optimization, this is skipped if the kernel is already running on
+the device (as detected by checking `uname -r -v`; this usually
+identifies the commit and build timestamp).
+
+Note that `fastboot boot` just boots the kernel once; it doesn't
+install it persistently.  Also, on some devices it doesn't bring up
+the full functionality or even doesn't work at all, since it doesn't
+install kernel modules or device-tree overlays.  If it doesn't work,
+you'll need to install and boot the kernel yourself instead.  See your
+device's documentation for details, but you'll at least need to build
+the kernel into a boot.img and flash it to the "boot" partition.  On
+some devices additional partitions must be flashed as well, e.g.
+vendor and vbmeta.  As an example, for "marlin" devices running
+Android N, one must copy `arch/arm64/boot/Image.gz-dtb` into
+`device/google/marlin-kernel/` in the Android source tree, then run
+the following commands from the root of the Android source tree:
 
     . build/envsetup.sh
-    lunch marlin-userdebug
+    lunch marlin-eng
     make -j16 bootimage
     fastboot flash boot out/target/product/marlin/boot.img
     fastboot continue
@@ -112,41 +120,49 @@ by rebooting into fastboot mode and reformatting the userdata
 filesystem.  Since this causes all user data to be wiped,
 android-xfstests will ask for confirmation before doing this.
 
-## Known issues
-
-android-xfstests doesn't yet do kernel installation; you have to do
-that yourself.
+Note that Android devices usually run an older version of the Linux
+kernel.  At the same time, xfstests is constantly being updated to add
+new tests.  Therefore, it's often the case that some of the more
+recently added tests will fail.  Some tests may even cause a kernel
+crash or deadlock and will need to be excluded with `-X` in order for
+the test run to complete, as a temporary workaround until you can
+backport the needed bug fixes.  It's recommended to keep your device's
+kernel up-to-date with the corresponding LTS kernel to help minimize
+the number of test failures that need to be triaged.  (Of course,
+there are obviously many other benefits of doing that as well...)
+
+## Monitoring and debugging
+
+To get a shell in the chroot, use `android-xfstests shell`.  You can
+do this at any time, regardless of whether tests are currently
+running.  Note that this is a real shell on the device, and it doesn't
+use a snapshot of the root filesystem like `kvm-xfstests shell` does.
+Thus, any changes you make in the shell session are persistent.
 
-Terminating android-xfstests with Ctrl-C doesn't stop the test process
-on the device.
-
-'android-xfstests shell' gives you a shell in the chroot, but it's not
-a snapshot like it is for kvm-xfstests; that is, any changes you make
-in the shell session are persistent.
-
-Android devices usually run an older version of the Linux kernel.  At
-the same time, xfstests is constantly being updated to add new tests.
-Therefore, you can expect there to be a significant number of failing
-tests due to bugs.  Some tests may even cause a kernel crash or
-deadlock and will need to be excluded with -X in order for the test
-run to complete.  Note, however, that bugs reproduced by xfstests are
-not necessarily reachable by unprivileged users (though they can be!).
+## Known issues
 
-Tests which create loopback or device-mapper devices currently fail
-because the corresponding device nodes do not get automatically
-created on Android.
+If using the armhf (32-bit) tarball on an aarch64 kernel, the
+encryption tests may fail due to a kernel bug that caused the keyctl
+system call to be unavailable to 32-bit programs.  This can be fixed
+by cherry-picking commit 5c2a625937ba ("arm64: support keyctl() system
+call in 32-bit mode") into your kernel from Linux v4.11.
 
-Any test that requires non-root users currently fails because xfstests
-incorrectly thinks that YP/NIS is enabled.
+Tests that create device-mapper devices (e.g. generic/250,
+generic/252, generic/338) fail because the Android equivalent of udev
+does not create the dm device nodes in the location expected by
+xfstests (`/dev/mapper/`).
 
-On recent versions of Android, all new files inherit SELinux xattrs.
-This confuses generic/062 and generic/377 and causes them to fail.
+Android kernels are sometimes configured without SysV IPC support ---
+i.e., `CONFIG_SYSVIPC` isn't set.  This can cause several problems:
 
-generic/240 and tests using dmsetup fail on kernels configured without
-SysV IPC support, which includes most Android kernels.
+- Tests that use the `dbench` program (generic/241) fail.
+- Tests that use the `dmsetup` program fail (if they didn't already
+  fail because of the device node issue noted above)
+- Tests that use the `fio` program (e.g. ext4/301, ext4/302, ext4/303,
+  generic/095, generic/299, generic/300) are skipped.
 
-generic/004 fails because of glibc bug
-https://sourceware.org/bugzilla/show_bug.cgi?id=17912.
+generic/004 should work, but in fact it's skipped because of a [glibc
+bug](https://sourceware.org/bugzilla/show_bug.cgi?id=17912).
 
 ## Resetting userdata
 
@@ -155,8 +171,8 @@ not show up in the device's on-disk partition table or fstab, and they
 will go away after reboot.  However, the reformatting of the userdata
 filesystem with a smaller size to free up space is persistent.  If you
 are done running xfstests and wish to expand userdata to take up its
-full partition again, then reboot into fastboot mode and run 'fastboot
--w' to wipe and reformat userdata again, this time with the full size.
+full partition again, then reboot into fastboot mode and run `fastboot
+-w` to wipe and reformat userdata again, this time with the full size.
 
 ## Other notes
 
-- 
2.14.0.rc0.400.g1c36432dff-goog

--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux