[LTP] [PATCH v2] squashfs: Add regression test for sanity check bug

Joerg Vehlow lkml@jv-coder.de
Wed Jul 14 09:40:03 CEST 2021


Hi Richard,

On 7/14/2021 8:53 AM, Richard Palethorpe wrote:
> Hello Joerg,
>
> Joerg Vehlow <lkml@jv-coder.de> writes:
>
>> + */
>> +
>> +/*\
>> + * [DESCRIPTION]
> I think it is [Description] now.
Both seem to work and there is no documentation for this.
But looks the lower case variant is used more often. Will update this 
for v3.
>
>> + *
>> +
>> +	/* Create squashfs without any comporession.
>> +	 * This allows reasoning about block sizes
>> +	 */
>> +	TST_EXP_PASS(tst_system(
>> +		"mksquashfs data image.raw -noI -noD -noX -noF >/dev/null 2>&1"
> I guess the existing API functions to create an image will not work with
> squashfs?
Honestly I don't know what they are... If it is .format_device stuff, 
then no, this cannot be used
for squashfs, because the data has to be prepared, before the filesystem 
can be created.
>
> At any rate, mksquashfs should be added to .needs_cmds.
Right, forgot about that when converting from shell
>
>> +	), "Create squashfs");
>> +
>> +	SAFE_MKDIR("mnt", 0777);
>> +	TST_EXP_PASS(tst_system("mount -tsquashfs -oloop image.raw
>> mnt"));
> Also why not use safe_mount? I think we have some infra to find a spare
> loop device (.needs_device).
safe_mount would result in TBROK instead of TFAIL. Since mounting is the 
actual test,
a failed mount must be TFAIL.
But TST_EXP_PASS is also not ideal, because it should use tst_brk and 
not tst_res.
Otherwise SAFE_UMOUNT fails with TBROK..
Is there some other api function or do I have to implement the return 
value check myself?

Here is the diff for using needs_device:
diff --git a/testcases/kernel/fs/squashfs/squashfs_regression.c 
b/testcases/kernel/fs/squashfs/squashfs_regression.c
index 23f681367..affba8069 100644
--- a/testcases/kernel/fs/squashfs/squashfs_regression.c
+++ b/testcases/kernel/fs/squashfs/squashfs_regression.c
@@ -44,6 +44,7 @@ static void cleanup(void)
  static void run(void)
  {
      int i;
+    char cmd[1024];

      tst_res(TINFO, "Test squashfs sanity check regressions");

@@ -66,15 +67,17 @@ static void run(void)
          close(fd);
      }

-    /* Create squashfs without any comporession.
-     * This allows reasoning about block sizes
+    /* Create squashfs without any compression.
+     * This allows reasoning about block sizes.
+     * Redirect stdout, to get rid of undefined uid messages
       */
-    TST_EXP_PASS(tst_system(
-        "mksquashfs data image.raw -noI -noD -noX -noF >/dev/null 2>&1"
-    ), "Create squashfs");
+    sprintf(cmd,
+            "mksquashfs data %s -noI -noD -noX -noF -noappend >/dev/null",
+            tst_device->dev);
+    TST_EXP_PASS(tst_system(cmd), "Create squashfs");

      SAFE_MKDIR("mnt", 0777);
-    TST_EXP_PASS(tst_system("mount -tsquashfs -oloop image.raw mnt"));
+    TST_EXP_PASS(mount(tst_device->dev, "mnt", "squashfs", 0, NULL));

      SAFE_UMOUNT("mnt");

@@ -85,9 +88,14 @@ static struct tst_test test = {
      .test_all = run,
      .cleanup = cleanup,
      .needs_root = 1,
+    .needs_device = 1,
+    .dev_min_size = 1,
+    .needs_cmds = (const char *const []) {
+        "mksquashfs",
+        NULL
+    },
      .needs_drivers = (const char *const []) {
          "squashfs",
-        "loop",
          NULL
      },
      .tags = (const struct tst_tag[]) {


Joerg


More information about the ltp mailing list