Commit 0268d457 authored by Muhammad Usama Anjum's avatar Muhammad Usama Anjum Committed by Andrew Morton
Browse files

selftests: hugetlb_dio: check for initial conditions to skip in the start

The test should be skipped if initial conditions aren't fulfilled in the
start instead of failing and outputting non-compliant TAP logs.  This kind
of failure pollutes the results.  The initial conditions are:

- The test should only execute if /tmp file can be allocated.
- The test should only execute if huge pages are free.

Before:
TAP version 13
1..4
Bail out! Error opening file
: Read-only file system (30)
 # Planned tests != run tests (4 != 0)
 # Totals: pass:0 fail:0 xfail:0 xpass:0 skip:0 error:0

After:
TAP version 13
1..0 # SKIP Unable to allocate file: Read-only file system

Link: https://lkml.kernel.org/r/20241101141557.3159432-1-usama.anjum@collabora.com


Signed-off-by: default avatarMuhammad Usama Anjum <usama.anjum@collabora.com>
Fixes: 3a103b53 ("selftest: mm: Test if hugepage does not get leaked during __bio_release_pages()")
Cc: Muhammad Usama Anjum <usama.anjum@collabora.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Donet Tom <donettom@linux.ibm.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 652e1a51
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -44,13 +44,6 @@ void run_dio_using_hugetlb(unsigned int start_off, unsigned int end_off)
	if (fd < 0)
		ksft_exit_fail_perror("Error opening file\n");

	/* Get the free huge pages before allocation */
	free_hpage_b = get_free_hugepages();
	if (free_hpage_b == 0) {
		close(fd);
		ksft_exit_skip("No free hugepage, exiting!\n");
	}

	/* Allocate a hugetlb page */
	orig_buffer = mmap(NULL, h_pagesize, mmap_prot, mmap_flags, -1, 0);
	if (orig_buffer == MAP_FAILED) {
@@ -94,8 +87,20 @@ void run_dio_using_hugetlb(unsigned int start_off, unsigned int end_off)
int main(void)
{
	size_t pagesize = 0;
	int fd;

	ksft_print_header();

	/* Open the file to DIO */
	fd = open("/tmp", O_TMPFILE | O_RDWR | O_DIRECT, 0664);
	if (fd < 0)
		ksft_exit_skip("Unable to allocate file: %s\n", strerror(errno));
	close(fd);

	/* Check if huge pages are free */
	if (!get_free_hugepages())
		ksft_exit_skip("No free hugepage, exiting\n");

	ksft_set_plan(4);

	/* Get base page size */