From patchwork Wed Nov 28 16:46:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 1004653 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="vF9pNSoa"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 434mlX6lw0z9s2P for ; Thu, 29 Nov 2018 03:47:04 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 749043E79CC for ; Wed, 28 Nov 2018 17:47:02 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-4.smtp.seeweb.it (in-4.smtp.seeweb.it [217.194.8.4]) by picard.linux.it (Postfix) with ESMTP id C44E53E7990 for ; Wed, 28 Nov 2018 17:46:54 +0100 (CET) Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-4.smtp.seeweb.it (Postfix) with ESMTPS id 0F5F11001740 for ; Wed, 28 Nov 2018 17:46:54 +0100 (CET) Received: by mail-wm1-x343.google.com with SMTP id z18so3352873wmc.4 for ; Wed, 28 Nov 2018 08:46:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Ir7xKWj0DST9sha3tBEBbADV8zPUBpZPUvqpY3EErcM=; b=vF9pNSoaMcX8uQh2CYtzQDaQju8dbyjwTbYlVLaZWWP0VCu8ZAK9/FBVTMtvuvhFmE Q1rIPM1prlzG9Gx+eQFvR6ugNJS1FaYMo8LFySYXgDLBIgBUH8ojWuc33bqsW88k0thx drAjsFuaX26R/QRlMryfw7afQhD9riObVEGy2/wPILOokTt0Yis6DzjMkgvEXRG1WP63 kv5pCiYlSdZeN/3aUHdNsD0crPwWb1rLli8hrGnoROpbf1bsZokI9HdOwoReCgtCw1Wl 6Qa0MfkpQms/w/YVDc2mYK5EXLWl3vh9oL7z+Qj6RMZDeP8CMnnYY4ExVfQxaM4qqW/V xMPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Ir7xKWj0DST9sha3tBEBbADV8zPUBpZPUvqpY3EErcM=; b=kFCyfq4efNBz65l+buTm3osnw3X7qXr3F1UCZk0CY0P02CTDmWMk8K+7dxpI6OWKlu q5kh4C/v02nW0MR0yt/+KXNe7yCs0WGwBuoHtSfddmqapUI2hiluY1qaBXIAl2IIC75F 4/n4gMOyY6VqX+5sdMxwZpMrCH0TrqrZ3iiQayjqW0ewIouAsnfzPAxfTSaQDydjaySk XkYz18L/lD3r9YVnyeWgSDhQbXnbBa0H/MVHw+BNRnOcHqZRaYfPD5NMbesOIYuwoBDb +xkZC32ViQLsg3Lk84X9f0+LbMrNFu642VknU+hzC1wpAlYRebK9GrJiv+NuoMSBKhya MdAA== X-Gm-Message-State: AA+aEWYRwcg61g5eZ1AA5ptfjpznYCWFbhaxff6zTeD8OPEvxPBnYqYy XeR+674imGCwOyU7vxFPKvs= X-Google-Smtp-Source: AFSGD/VYTl2INueq+DJEJ5EU+EQwLPk4GFXFMydqqDqJo2s3HHZnbeNRm7XUSkzAwcA5WjZGrnEYtg== X-Received: by 2002:a1c:c545:: with SMTP id v66mr3347382wmf.132.1543423613334; Wed, 28 Nov 2018 08:46:53 -0800 (PST) Received: from localhost.localdomain ([37.46.46.74]) by smtp.gmail.com with ESMTPSA id 126-v6sm2732945wme.48.2018.11.28.08.46.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Nov 2018 08:46:52 -0800 (PST) From: Amir Goldstein To: Cyril Hrubis Date: Wed, 28 Nov 2018 18:46:40 +0200 Message-Id: <20181128164645.783-2-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181128164645.783-1-amir73il@gmail.com> References: <20181128164645.783-1-amir73il@gmail.com> X-Virus-Scanned: clamav-milter 0.99.2 at in-4.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-4.smtp.seeweb.it Cc: linux-unionfs@vger.kernel.org, ltp@lists.linux.it, Miklos Szeredi Subject: [LTP] [PATCH v4 1/6] syscalls/readahead02: Convert to newlib and cleanup X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" * Use SAFE macros * Use SPDX-License-Identifier * No need to cleanup test file from temp dir * No need to check if __NR_readahead is defined Signed-off-by: Amir Goldstein --- .../kernel/syscalls/readahead/readahead02.c | 251 +++++------------- 1 file changed, 71 insertions(+), 180 deletions(-) diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c index c9d92a6a4..956a1d5e5 100644 --- a/testcases/kernel/syscalls/readahead/readahead02.c +++ b/testcases/kernel/syscalls/readahead/readahead02.c @@ -1,25 +1,6 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Copyright (C) 2012 Linux Test Project, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it - * is free of the rightful claim of any third person regarding - * infringement or the like. Any license provided herein, whether - * implied or otherwise, applies only to this software file. Patent - * licenses, if any, provided herein do not apply to combinations of - * this program with other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA. */ /* @@ -43,86 +24,56 @@ #include #include #include "config.h" -#include "test.h" -#include "safe_macros.h" +#include "tst_test.h" #include "lapi/syscalls.h" -char *TCID = "readahead02"; -int TST_TOTAL = 1; - -#if defined(__NR_readahead) static char testfile[PATH_MAX] = "testfile"; static const char drop_caches_fname[] = "/proc/sys/vm/drop_caches"; static const char meminfo_fname[] = "/proc/meminfo"; static size_t testfile_size = 64 * 1024 * 1024; -static int opt_fsize; static char *opt_fsizestr; static int pagesize; -static const char *fs_type; -static const char *device; -static int mount_flag; #define MNTPOINT "mntpoint" #define MIN_SANE_READAHEAD (4u * 1024u) -option_t options[] = { - {"s:", &opt_fsize, &opt_fsizestr}, +static const char mntpoint[] = MNTPOINT; + +static struct tst_option options[] = { + {"s:", &opt_fsizestr, "-s testfile size (default 64MB)"}, {NULL, NULL, NULL} }; -static void setup(void); -static void cleanup(void); - -static void help(void) -{ - printf(" -s x testfile size (default 64MB)\n"); -} - static int check_ret(long expected_ret) { - if (expected_ret == TEST_RETURN) { - tst_resm(TPASS, "expected ret success - " - "returned value = %ld", TEST_RETURN); + if (expected_ret == TST_RET) { + tst_res(TPASS, "expected ret success - " + "returned value = %ld", TST_RET); return 0; } - tst_resm(TFAIL | TTERRNO, "unexpected failure - " - "returned value = %ld, expected: %ld", - TEST_RETURN, expected_ret); + tst_res(TFAIL | TTERRNO, "unexpected failure - " + "returned value = %ld, expected: %ld", + TST_RET, expected_ret); return 1; } static int has_file(const char *fname, int required) { - int ret; struct stat buf; - ret = stat(fname, &buf); - if (ret == -1) { - if (errno == ENOENT) - if (required) - tst_brkm(TCONF, cleanup, "%s not available", - fname); - else - return 0; - else - tst_brkm(TBROK | TERRNO, cleanup, "stat %s", fname); + + if (stat(fname, &buf) == -1) { + if (errno != ENOENT) + tst_brk(TBROK | TERRNO, "stat %s", fname); + if (required) + tst_brk(TCONF, "%s not available", fname); + return 0; } return 1; } static void drop_caches(void) { - int ret; - FILE *f; - - f = fopen(drop_caches_fname, "w"); - if (f) { - ret = fprintf(f, "1"); - fclose(f); - if (ret < 1) - tst_brkm(TBROK, cleanup, "Failed to drop caches"); - } else { - tst_brkm(TBROK, cleanup, "Failed to open drop_caches"); - } + SAFE_FILE_PRINTF(drop_caches_fname, "1"); } static unsigned long parse_entry(const char *fname, const char *entry) @@ -161,32 +112,21 @@ static unsigned long get_cached_size(void) static void create_testfile(void) { - FILE *f; + int fd; char *tmp; size_t i; - tst_resm(TINFO, "creating test file of size: %zu", testfile_size); - tmp = SAFE_MALLOC(cleanup, pagesize); + tst_res(TINFO, "creating test file of size: %zu", testfile_size); + tmp = SAFE_MALLOC(pagesize); /* round to page size */ testfile_size = testfile_size & ~((long)pagesize - 1); - f = fopen(testfile, "w"); - if (!f) { - free(tmp); - tst_brkm(TBROK | TERRNO, cleanup, "Failed to create %s", - testfile); - } - + fd = SAFE_CREAT(testfile, 0644); for (i = 0; i < testfile_size; i += pagesize) - if (fwrite(tmp, pagesize, 1, f) < 1) { - free(tmp); - tst_brkm(TBROK, cleanup, "Failed to create %s", - testfile); - } - fflush(f); - fsync(fileno(f)); - fclose(f); + SAFE_WRITE(1, fd, tmp, pagesize); + SAFE_FSYNC(fd); + SAFE_CLOSE(fd); free(tmp); } @@ -215,13 +155,13 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, off_t offset = 0; struct timeval now; - fd = SAFE_OPEN(cleanup, fname, O_RDONLY); + fd = SAFE_OPEN(fname, O_RDONLY); if (do_readahead) { cached_start = get_cached_size(); do { TEST(readahead(fd, offset, fsize - offset)); - if (TEST_RETURN != 0) { + if (TST_RET != 0) { check_ret(0); break; } @@ -232,7 +172,7 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, if (*cached > cached_start) { max_ra_estimate = (1024 * (*cached - cached_start)); - tst_resm(TINFO, "max ra estimate: %lu", + tst_res(TINFO, "max ra estimate: %lu", max_ra_estimate); } max_ra_estimate = MAX(max_ra_estimate, @@ -242,27 +182,23 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, i++; offset += max_ra_estimate; } while ((size_t)offset < fsize); - tst_resm(TINFO, "readahead calls made: %zu", i); + tst_res(TINFO, "readahead calls made: %zu", i); *cached = get_cached_size(); /* offset of file shouldn't change after readahead */ - offset = lseek(fd, 0, SEEK_CUR); - if (offset == (off_t) - 1) - tst_brkm(TBROK | TERRNO, cleanup, "lseek failed"); + offset = SAFE_LSEEK(fd, 0, SEEK_CUR); if (offset == 0) - tst_resm(TPASS, "offset is still at 0 as expected"); + tst_res(TPASS, "offset is still at 0 as expected"); else - tst_resm(TFAIL, "offset has changed to: %lu", offset); + tst_res(TFAIL, "offset has changed to: %lu", offset); } if (gettimeofday(&now, NULL) == -1) - tst_brkm(TBROK | TERRNO, cleanup, "gettimeofday failed"); + tst_brk(TBROK | TERRNO, "gettimeofday failed"); time_start_usec = now.tv_sec * 1000000 + now.tv_usec; read_bytes_start = get_bytes_read(); - p = mmap(NULL, fsize, PROT_READ, MAP_SHARED | MAP_POPULATE, fd, 0); - if (p == MAP_FAILED) - tst_brkm(TBROK | TERRNO, cleanup, "mmap failed"); + p = SAFE_MMAP(NULL, fsize, PROT_READ, MAP_SHARED | MAP_POPULATE, fd, 0); /* for old kernels, where MAP_POPULATE doesn't work, touch each page */ tmp = 0; @@ -270,20 +206,20 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, tmp = tmp ^ p[i]; /* prevent gcc from optimizing out loop above */ if (tmp != 0) - tst_brkm(TBROK, NULL, "This line should not be reached"); + tst_brk(TBROK, "This line should not be reached"); if (!do_readahead) *cached = get_cached_size(); - SAFE_MUNMAP(cleanup, p, fsize); + SAFE_MUNMAP(p, fsize); *read_bytes = get_bytes_read() - read_bytes_start; if (gettimeofday(&now, NULL) == -1) - tst_brkm(TBROK | TERRNO, cleanup, "gettimeofday failed"); + tst_brk(TBROK | TERRNO, "gettimeofday failed"); time_end_usec = now.tv_sec * 1000000 + now.tv_usec; *usec = time_end_usec - time_start_usec; - SAFE_CLOSE(cleanup, fd); + SAFE_CLOSE(fd); } static void test_readahead(void) @@ -302,7 +238,7 @@ static void test_readahead(void) cached_low = get_cached_size(); cached_max = cached_max - cached_low; - tst_resm(TINFO, "read_testfile(0)"); + tst_res(TINFO, "read_testfile(0)"); read_testfile(0, testfile, testfile_size, &read_bytes, &usec, &cached); if (cached > cached_low) cached = cached - cached_low; @@ -312,7 +248,7 @@ static void test_readahead(void) sync(); drop_caches(); cached_low = get_cached_size(); - tst_resm(TINFO, "read_testfile(1)"); + tst_res(TINFO, "read_testfile(1)"); read_testfile(1, testfile, testfile_size, &read_bytes_ra, &usec_ra, &cached_ra); if (cached_ra > cached_low) @@ -320,25 +256,25 @@ static void test_readahead(void) else cached_ra = 0; - tst_resm(TINFO, "read_testfile(0) took: %ld usec", usec); - tst_resm(TINFO, "read_testfile(1) took: %ld usec", usec_ra); + tst_res(TINFO, "read_testfile(0) took: %ld usec", usec); + tst_res(TINFO, "read_testfile(1) took: %ld usec", usec_ra); if (has_file(proc_io_fname, 0)) { - tst_resm(TINFO, "read_testfile(0) read: %ld bytes", read_bytes); - tst_resm(TINFO, "read_testfile(1) read: %ld bytes", - read_bytes_ra); + tst_res(TINFO, "read_testfile(0) read: %ld bytes", read_bytes); + tst_res(TINFO, "read_testfile(1) read: %ld bytes", + read_bytes_ra); /* actual number of read bytes depends on total RAM */ if (read_bytes_ra < read_bytes) - tst_resm(TPASS, "readahead saved some I/O"); + tst_res(TPASS, "readahead saved some I/O"); else - tst_resm(TFAIL, "readahead failed to save any I/O"); + tst_res(TFAIL, "readahead failed to save any I/O"); } else { - tst_resm(TCONF, "Your system doesn't have /proc/pid/io," - " unable to determine read bytes during test"); + tst_res(TCONF, "Your system doesn't have /proc/pid/io," + " unable to determine read bytes during test"); } - tst_resm(TINFO, "cache can hold at least: %ld kB", cached_max); - tst_resm(TINFO, "read_testfile(0) used cache: %ld kB", cached); - tst_resm(TINFO, "read_testfile(1) used cache: %ld kB", cached_ra); + tst_res(TINFO, "cache can hold at least: %ld kB", cached_max); + tst_res(TINFO, "read_testfile(0) used cache: %ld kB", cached); + tst_res(TINFO, "read_testfile(1) used cache: %ld kB", cached_ra); if (cached_max * 1024 >= testfile_size) { /* @@ -346,83 +282,38 @@ static void test_readahead(void) * for readahead should be at least testfile_size/2 */ if (cached_ra * 1024 > testfile_size / 2) - tst_resm(TPASS, "using cache as expected"); + tst_res(TPASS, "using cache as expected"); else - tst_resm(TWARN, "using less cache than expected"); + tst_res(TWARN, "using less cache than expected"); } else { - tst_resm(TCONF, "Page cache on your system is too small " - "to hold whole testfile."); + tst_res(TCONF, "Page cache on your system is too small " + "to hold whole testfile."); } } -int main(int argc, char *argv[]) -{ - int lc; - - tst_parse_opts(argc, argv, options, help); - - if (opt_fsize) - testfile_size = atoi(opt_fsizestr); - - setup(); - for (lc = 0; TEST_LOOPING(lc); lc++) { - tst_count = 0; - test_readahead(); - } - cleanup(); - tst_exit(); -} - static void setup(void) { - tst_require_root(); - tst_tmpdir(); - TEST_PAUSE; + if (opt_fsizestr) + testfile_size = SAFE_STRTOL(opt_fsizestr, 1, INT_MAX); has_file(drop_caches_fname, 1); has_file(meminfo_fname, 1); /* check if readahead is supported */ - ltp_syscall(__NR_readahead, 0, 0, 0); + tst_syscall(__NR_readahead, 0, 0, 0); pagesize = getpagesize(); - if (tst_fs_type(cleanup, ".") == TST_TMPFS_MAGIC) { - tst_resm(TINFO, "TMPFS detected, creating loop device"); - - fs_type = tst_dev_fs_type(); - device = tst_acquire_device(cleanup); - if (!device) { - tst_brkm(TCONF, cleanup, - "Failed to obtain block device"); - } - - tst_mkfs(cleanup, device, fs_type, NULL, NULL); - - SAFE_MKDIR(cleanup, MNTPOINT, 0755); - SAFE_MOUNT(cleanup, device, MNTPOINT, fs_type, 0, NULL); - mount_flag = 1; - - sprintf(testfile, MNTPOINT"/testfile"); - } + sprintf(testfile, "%s/testfile", mntpoint); create_testfile(); } -static void cleanup(void) -{ - unlink(testfile); - if (mount_flag && tst_umount(MNTPOINT) < 0) - tst_resm(TWARN | TERRNO, "umount device:%s failed", device); - - if (device) - tst_release_device(device); - - tst_rmdir(); -} - -#else /* __NR_readahead */ -int main(void) -{ - tst_brkm(TCONF, NULL, "System doesn't support __NR_readahead"); -} -#endif +static struct tst_test test = { + .needs_root = 1, + .needs_tmpdir = 1, + .mount_device = 1, + .mntpoint = mntpoint, + .setup = setup, + .options = options, + .test_all = test_readahead, +}; From patchwork Wed Nov 28 16:46:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 1004654 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="lS+X4EKu"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 434mlf3zZsz9s2P for ; Thu, 29 Nov 2018 03:47:10 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 1AF823E7999 for ; Wed, 28 Nov 2018 17:47:08 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-5.smtp.seeweb.it (in-5.smtp.seeweb.it [217.194.8.5]) by picard.linux.it (Postfix) with ESMTP id 8FDC53E797D for ; Wed, 28 Nov 2018 17:46:55 +0100 (CET) Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-5.smtp.seeweb.it (Postfix) with ESMTPS id 277426012A3 for ; Wed, 28 Nov 2018 17:46:55 +0100 (CET) Received: by mail-wm1-x341.google.com with SMTP id 125so3376320wmh.0 for ; Wed, 28 Nov 2018 08:46:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=M1T513td7gkfgr/FQnsLF7pcOGK39s6ZLAVhElgiBA4=; b=lS+X4EKu8tF70XxlzpUC+7DfFnbbYsgvebHmXotpM0sDQjafl5L7bjPUSFtGNiuGJh c4Mth+CqXFueDN8WP+LBonyG7WmsF4IQKTGX3cPESD8wPL43jf4dKVdkxDLUM/U45Sho SrTdgAGyroXIgoZWnzhk9bXuqtF+bO/OZrNuHd0q/FryYvZacnYhhuajQ/VMKQ3NOvkW Qdw++EmEWklZx1yP7RVOqEiZTJgDNyvKW+g2cq03OVTf+h1wWCCr/hNc+iuuABVLBvBI VKwU/3VqDdCGK1dZCnXp1vxGTrrvDX17lBLz7xLH7Vn+o6YdDHdQZD6VQaMqFuFSwrwO T34A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=M1T513td7gkfgr/FQnsLF7pcOGK39s6ZLAVhElgiBA4=; b=LsrKPXAXVo0IryW8bTQQghbUU/edhkOCq85A5SaU2fMOfFnWJydcBtPWHvgCX6W8Su 24rqqdNiyh4nZdX3soVWKa95imjjMf1ICLDpfTsFKZXsVRLCc+z4NfumhWdd5PJU5eQV wZhgHTosR2UvrmRqvLFQE/PVt2BuwQ3ROGhuzOxfTldaY63RlWcUyC/tXoNO06PlrpgG KgqvDNn5jGy7azWjGWwASZPvvJew5mh9YTLkmKl/qudvN5FDLtbdgKWffiBeXG91krxo 9DPng7vyqJsRfhGCe/45DhLlyrKbwQRhNTfOuyk6LTRu/Z/JcJJaH0nEerMOFk0Ry/Zs 46Pg== X-Gm-Message-State: AA+aEWbhVI0IYj9T0YtKZ6TT8IpFgzrt7jb4lYkQGIFy8KFWt7z1qN6u Ts+bHfF8pDR3cuE+FL1CBzI= X-Google-Smtp-Source: AFSGD/XLY84Ye+WrPbdgG4KH8Mv0pj5VEHvmRSVt6f7JiaQMZEfI5vaBaq4+HaQfwGk4NcFmhY5RoQ== X-Received: by 2002:a1c:ef08:: with SMTP id n8mr3694599wmh.114.1543423614646; Wed, 28 Nov 2018 08:46:54 -0800 (PST) Received: from localhost.localdomain ([37.46.46.74]) by smtp.gmail.com with ESMTPSA id 126-v6sm2732945wme.48.2018.11.28.08.46.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Nov 2018 08:46:54 -0800 (PST) From: Amir Goldstein To: Cyril Hrubis Date: Wed, 28 Nov 2018 18:46:41 +0200 Message-Id: <20181128164645.783-3-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181128164645.783-1-amir73il@gmail.com> References: <20181128164645.783-1-amir73il@gmail.com> X-Virus-Scanned: clamav-milter 0.99.2 at in-5.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-5.smtp.seeweb.it Cc: linux-unionfs@vger.kernel.org, ltp@lists.linux.it, Miklos Szeredi Subject: [LTP] [PATCH v4 2/6] syscalls/readahead02: abort test if readahead syscall fails X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" There is no reason to continue the test if readahead syscall fails and we can also check and report TCONF if filesystem does not support readahead. Signed-off-by: Amir Goldstein --- .../kernel/syscalls/readahead/readahead02.c | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c index 956a1d5e5..88eb5fbff 100644 --- a/testcases/kernel/syscalls/readahead/readahead02.c +++ b/testcases/kernel/syscalls/readahead/readahead02.c @@ -44,19 +44,6 @@ static struct tst_option options[] = { {NULL, NULL, NULL} }; -static int check_ret(long expected_ret) -{ - if (expected_ret == TST_RET) { - tst_res(TPASS, "expected ret success - " - "returned value = %ld", TST_RET); - return 0; - } - tst_res(TFAIL | TTERRNO, "unexpected failure - " - "returned value = %ld, expected: %ld", - TST_RET, expected_ret); - return 1; -} - static int has_file(const char *fname, int required) { struct stat buf; @@ -162,8 +149,8 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, do { TEST(readahead(fd, offset, fsize - offset)); if (TST_RET != 0) { - check_ret(0); - break; + SAFE_CLOSE(fd); + return; } /* estimate max readahead size based on first call */ @@ -251,6 +238,16 @@ static void test_readahead(void) tst_res(TINFO, "read_testfile(1)"); read_testfile(1, testfile, testfile_size, &read_bytes_ra, &usec_ra, &cached_ra); + if (TST_RET != 0) { + if (TST_ERR == EINVAL) { + tst_res(TCONF, "readahead not supported on %s", + tst_device->fs_type); + } else { + tst_res(TFAIL | TTERRNO, "readahead failed on %s", + tst_device->fs_type); + } + return; + } if (cached_ra > cached_low) cached_ra = cached_ra - cached_low; else From patchwork Wed Nov 28 16:46:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 1004655 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="r0Rjr9R7"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 434mll0rcLz9s2P for ; Thu, 29 Nov 2018 03:47:14 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 1A5EA3E79CC for ; Wed, 28 Nov 2018 17:47:12 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-2.smtp.seeweb.it (in-2.smtp.seeweb.it [217.194.8.2]) by picard.linux.it (Postfix) with ESMTP id F2C633E7985 for ; Wed, 28 Nov 2018 17:46:56 +0100 (CET) Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-2.smtp.seeweb.it (Postfix) with ESMTPS id 8A705601932 for ; Wed, 28 Nov 2018 17:46:56 +0100 (CET) Received: by mail-wm1-x344.google.com with SMTP id s14so3111467wmh.1 for ; Wed, 28 Nov 2018 08:46:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=yojRlIZoej7InWD49JteBk5ja2J1dC1pYhevihIx5eo=; b=r0Rjr9R703byUfZxVsjY09yUSXPV8hxZuCfUU4Spu0jQ1ylkHBAhdxwfnrnjmJ5SGO P2Jwtkv8Z5sAVzCvpv+CQZvOUuRNw3r36fJuv6rDve2a/CfU7WJoTrDYAheEoAWiKfr/ qk2O7V6Xym1qrgUXMYtXMy7JidHzCc239EwjxNGBClpcO5giDQa5YaK8iPFjkVHmYpws R+FTSRD4kQVZ0bNahWq0xCdafiahg9Aya6BZHlMHx5LmslgLdyCjMI0WPOHzeRq2+aAq AxoA4Yv7TDsgHjAF9Gpr+pw6/d2ZHUsJq0xwGsnwHqTtrRoqVXFVujaruUDKQ/WuY4vd CK4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=yojRlIZoej7InWD49JteBk5ja2J1dC1pYhevihIx5eo=; b=lZOP0fZDUllPHHGz163Jp+cldyCCnn/jtuc2vZqJnznjz0Sep6ELPbqhy4fNZC944O v80F3QMw/YfuUvXKhkM4ZKrei8L+K6JODAqSQYriiiuqNdQXDfcPS3c3oIkkCbNRLy5+ v510OgRAEHlFWeFPPwDM3sMZXyPny/k61L88BUQ7E6TClRMbEkYebEKa7xqojEDt/SGR rdvUtN0MMJfpWYCOkzfaxdmhCUZzr3SQNr6hiNLzImJwg+iQlQL5Nx5x8cyowAucCOhT 7MPB04v2Q7jbY8KI46wjoTXajEMbcryIVk3N7oyPmEc6yd6O4v97reQwS9j7gKqdaimY bScg== X-Gm-Message-State: AA+aEWYsI09Et51gPbz3xuh1RCjyGkH4Y58S3/rvkeqTz+rEGyw+HpMg NgS87kTzIbTj27TqMA0lOJ0= X-Google-Smtp-Source: AFSGD/V3bDMLae7Uii7A6EWNhmT/b7G+v2taV3/oEf6m+NXZOqaEHTd3JlHVExL2xnyXysMmQ28Lyg== X-Received: by 2002:a1c:1c88:: with SMTP id c130-v6mr3430052wmc.115.1543423616036; Wed, 28 Nov 2018 08:46:56 -0800 (PST) Received: from localhost.localdomain ([37.46.46.74]) by smtp.gmail.com with ESMTPSA id 126-v6sm2732945wme.48.2018.11.28.08.46.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Nov 2018 08:46:55 -0800 (PST) From: Amir Goldstein To: Cyril Hrubis Date: Wed, 28 Nov 2018 18:46:42 +0200 Message-Id: <20181128164645.783-4-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181128164645.783-1-amir73il@gmail.com> References: <20181128164645.783-1-amir73il@gmail.com> X-Virus-Scanned: clamav-milter 0.99.2 at in-2.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-2.smtp.seeweb.it Cc: linux-unionfs@vger.kernel.org, ltp@lists.linux.it, Miklos Szeredi Subject: [LTP] [PATCH v4 3/6] syscalls/readahead02: fail test if readahead did not use any cache X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" The heuristic of failing the test only if not saving any io has false negatives with overlayfs readahead() bug, but readahead() with overlayfs always warns on "using less cache then expected", when actually, it is using no cache at all. Add another condition to fail the test if readahead did not use any cache at all, which always detected the overlayfs bug. Signed-off-by: Amir Goldstein Acked-by: Jan Stancek --- testcases/kernel/syscalls/readahead/readahead02.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c index 88eb5fbff..0acdad482 100644 --- a/testcases/kernel/syscalls/readahead/readahead02.c +++ b/testcases/kernel/syscalls/readahead/readahead02.c @@ -280,6 +280,8 @@ static void test_readahead(void) */ if (cached_ra * 1024 > testfile_size / 2) tst_res(TPASS, "using cache as expected"); + else if (!cached_ra) + tst_res(TFAIL, "readahead failed to use any cache"); else tst_res(TWARN, "using less cache than expected"); } else { From patchwork Wed Nov 28 16:46:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 1004656 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HE5ZjI+B"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 434mlp1s92z9s2P for ; Thu, 29 Nov 2018 03:47:18 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 8A27C3E797D for ; Wed, 28 Nov 2018 17:47:15 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-7.smtp.seeweb.it (in-7.smtp.seeweb.it [IPv6:2001:4b78:1:20::7]) by picard.linux.it (Postfix) with ESMTP id 522F43E79A2 for ; Wed, 28 Nov 2018 17:46:58 +0100 (CET) Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-7.smtp.seeweb.it (Postfix) with ESMTPS id 004FD2011F0 for ; Wed, 28 Nov 2018 17:46:57 +0100 (CET) Received: by mail-wr1-x442.google.com with SMTP id j10so27004987wru.4 for ; Wed, 28 Nov 2018 08:46:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4L5jjk47+D0wKI1Wfr/w9sABisSFflxjk3io4PjSLFk=; b=HE5ZjI+BYwP+ScqqHENsd7jQSoPUgP5tFEqrgDZIlcoh9sT/3QSAXWhMhQF6AJCjJl CBGSphmQhFMZ3BH9McmP8JbcOjxglRpffg9EJu+GQlmQJT6Jbe7qUK7ngio8j4fO1TWZ ms0fRce3JrqyIa5lOGrfXTXWqt7noCGrs2lWNjJZ/vEx3KnxyvkeLm3XtWxb2wiGXuZ1 cdQuhxKMg83IsvztMHbbilSlXZMdVw0iuC3cBBGuIPBnYMS7whHYEu1HtsoGs7PHNKIs mxtLnGjav9DJdDjahIjLNUMlfDhIXCfAA3qILQK3EExeeCOqXvCbPJrNQok5TEJWXRgv ay4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4L5jjk47+D0wKI1Wfr/w9sABisSFflxjk3io4PjSLFk=; b=IkJ1zQUYA38ny5xPcjCGFUrMVQdPFu8vj831zqhRpIIdMrQuBuVgaA5oEPSjg+k+4B o1QzXagGtcreDfzTymudWXAviSo1bGj6INstr6q5sF8HfnPDyNg5oInnECg+naigVOnP Em/3wfBvADHPG83vdl8CkDXHIXunuqWs6tV/+/m6bDSMpmSEVP1rWc1X9+FlTw8WQunU PzurRQlKXp2l/zxgY0yGPoNmkpxXEc4zQq7mMuXnBVFZRPRGwaCWC6bX8lRqAbqZYAqX 5A60KPHehdEyhYdnda6m0s4mqZHn61KDNJAT9zEv2S+P3dm1fm0uRMKT72dba3TGeHKb TCxA== X-Gm-Message-State: AA+aEWZNf1dyYEZC/GL9+APgEZ/CQ/krbiNlKbMTpsZ7fjj/DxPruE3Q EhaujzTbTWPAoysEwz0CsMg= X-Google-Smtp-Source: AFSGD/XWaU2zVqT0uw1TlzgroXgwOlzEOTZTVAuS6kSKy2c/ozAkcTz+Qf8vQNbzgb/u88zG1rziug== X-Received: by 2002:adf:e18d:: with SMTP id k13mr32547450wri.36.1543423617529; Wed, 28 Nov 2018 08:46:57 -0800 (PST) Received: from localhost.localdomain ([37.46.46.74]) by smtp.gmail.com with ESMTPSA id 126-v6sm2732945wme.48.2018.11.28.08.46.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Nov 2018 08:46:56 -0800 (PST) From: Amir Goldstein To: Cyril Hrubis Date: Wed, 28 Nov 2018 18:46:43 +0200 Message-Id: <20181128164645.783-5-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181128164645.783-1-amir73il@gmail.com> References: <20181128164645.783-1-amir73il@gmail.com> X-Virus-Scanned: clamav-milter 0.99.2 at in-7.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-7.smtp.seeweb.it Cc: linux-unionfs@vger.kernel.org, ltp@lists.linux.it, Miklos Szeredi Subject: [LTP] [PATCH v4 4/6] syscalls/readahead02: Convert to tst_timer helpers X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" To avoid usinf wall clock and get rid of gettimeofday boiler plate code. Signed-off-by: Amir Goldstein --- .../kernel/syscalls/readahead/readahead02.c | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c index 0acdad482..24f045900 100644 --- a/testcases/kernel/syscalls/readahead/readahead02.c +++ b/testcases/kernel/syscalls/readahead/readahead02.c @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -25,6 +24,7 @@ #include #include "config.h" #include "tst_test.h" +#include "tst_timer.h" #include "lapi/syscalls.h" static char testfile[PATH_MAX] = "testfile"; @@ -130,17 +130,15 @@ static void create_testfile(void) * @cached: returns cached kB from /proc/meminfo */ static void read_testfile(int do_readahead, const char *fname, size_t fsize, - unsigned long *read_bytes, long *usec, + unsigned long *read_bytes, long long *usec, unsigned long *cached) { int fd; size_t i = 0; long read_bytes_start; unsigned char *p, tmp; - unsigned long time_start_usec, time_end_usec; unsigned long cached_start, max_ra_estimate = 0; off_t offset = 0; - struct timeval now; fd = SAFE_OPEN(fname, O_RDONLY); @@ -180,9 +178,7 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, tst_res(TFAIL, "offset has changed to: %lu", offset); } - if (gettimeofday(&now, NULL) == -1) - tst_brk(TBROK | TERRNO, "gettimeofday failed"); - time_start_usec = now.tv_sec * 1000000 + now.tv_usec; + tst_timer_start(CLOCK_MONOTONIC); read_bytes_start = get_bytes_read(); p = SAFE_MMAP(NULL, fsize, PROT_READ, MAP_SHARED | MAP_POPULATE, fd, 0); @@ -201,10 +197,8 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, SAFE_MUNMAP(p, fsize); *read_bytes = get_bytes_read() - read_bytes_start; - if (gettimeofday(&now, NULL) == -1) - tst_brk(TBROK | TERRNO, "gettimeofday failed"); - time_end_usec = now.tv_sec * 1000000 + now.tv_usec; - *usec = time_end_usec - time_start_usec; + tst_timer_stop(); + *usec = tst_timer_elapsed_us(); SAFE_CLOSE(fd); } @@ -212,7 +206,7 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, static void test_readahead(void) { unsigned long read_bytes, read_bytes_ra; - long usec, usec_ra; + long long usec, usec_ra; unsigned long cached_max, cached_low, cached, cached_ra; char proc_io_fname[128]; sprintf(proc_io_fname, "/proc/%u/io", getpid()); @@ -253,8 +247,8 @@ static void test_readahead(void) else cached_ra = 0; - tst_res(TINFO, "read_testfile(0) took: %ld usec", usec); - tst_res(TINFO, "read_testfile(1) took: %ld usec", usec_ra); + tst_res(TINFO, "read_testfile(0) took: %lli usec", usec); + tst_res(TINFO, "read_testfile(1) took: %lli usec", usec_ra); if (has_file(proc_io_fname, 0)) { tst_res(TINFO, "read_testfile(0) read: %ld bytes", read_bytes); tst_res(TINFO, "read_testfile(1) read: %ld bytes", From patchwork Wed Nov 28 16:46:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 1004657 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NkUDr4Zf"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 434mlt084gz9s3Z for ; Thu, 29 Nov 2018 03:47:22 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 6056A3E79B0 for ; Wed, 28 Nov 2018 17:47:19 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-4.smtp.seeweb.it (in-4.smtp.seeweb.it [217.194.8.4]) by picard.linux.it (Postfix) with ESMTP id BBB5C3E79A1 for ; Wed, 28 Nov 2018 17:46:59 +0100 (CET) Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-4.smtp.seeweb.it (Postfix) with ESMTPS id 49EFD1001751 for ; Wed, 28 Nov 2018 17:46:59 +0100 (CET) Received: by mail-wm1-x341.google.com with SMTP id s14so3111644wmh.1 for ; Wed, 28 Nov 2018 08:46:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=HwCjknwOOBUdTuxzdwwn/JRBAFkoNxoxe8o/TIS5/3c=; b=NkUDr4ZfUlKVi7koAvhMuJAO33itrAHfMfQbobPliabcZjVmiyPqnuDxWXOko6RoLo Cl/FLG6MEROcXvNoyhdse6ByfJtFwV6VcMtNHUKq2GeUuvtu0hjPtupJMImIhD0ysx3o XNhOibGRHyb94Skg0GE98Wsbt809tdIbn8Wx4mRCn5grfFzFtOvl2QQcKkUD07DceONk aHmlQQsZiKYy44TKee5wAvh6jn4pOb2pecaXwFkRudA3+SV1dnAwyHjd4G5Tv67fS+Gc e34xLX3f9dILHnMC4sY3PuC/v9h9eigXOXcais4dF7fn7LyCpdsSRYFEUwCKwecpETAH Fhfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=HwCjknwOOBUdTuxzdwwn/JRBAFkoNxoxe8o/TIS5/3c=; b=R498hbhSklreDg854616p3E36jSttRCMqp02wxFifjlmvczVa7kvodsr1cgPygpq4a iz01sySgWg1E5Yrn3gPOv6C+W0WSpNLeRr3LmDlN3ObSWGnrG8Zprh3VmnglblC+39la xhEu7DTRhZtAx7ytfMsQAtQhlETzIbkgk1u6mj8C+xZukpVn/uq37UzFnSY9tOAw8qRJ ufbCyX6k0x268nr2EK4Fmk5oNHqIcMUiwyD+0Lo1AOgfvX2uX84jgHZs0feRawC4ESY5 ue5TRI5GOSLo4P/oU3jxebt5hvz5CIdGEOfAVr+nGl5o/09Z+F7oFGPcR2rkEspXAsqc 5M8A== X-Gm-Message-State: AA+aEWb720U6wlgfcQO/aR17WXf/mGxKSCyRHXSFhvk4ivD7i7+WbF2i LiVODgm0yB2F1a5alySWP2I= X-Google-Smtp-Source: AFSGD/VTNy5SB+QIl7jqF5mFB0yGyVrccvQq6qnD7mUORpMmD0BzSpciaRHjoiwz5+lyqyh0imaEaw== X-Received: by 2002:a1c:6a01:: with SMTP id f1mr3583872wmc.17.1543423618827; Wed, 28 Nov 2018 08:46:58 -0800 (PST) Received: from localhost.localdomain ([37.46.46.74]) by smtp.gmail.com with ESMTPSA id 126-v6sm2732945wme.48.2018.11.28.08.46.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Nov 2018 08:46:58 -0800 (PST) From: Amir Goldstein To: Cyril Hrubis Date: Wed, 28 Nov 2018 18:46:44 +0200 Message-Id: <20181128164645.783-6-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181128164645.783-1-amir73il@gmail.com> References: <20181128164645.783-1-amir73il@gmail.com> X-Virus-Scanned: clamav-milter 0.99.2 at in-4.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-4.smtp.seeweb.it Cc: linux-unionfs@vger.kernel.org, ltp@lists.linux.it, Miklos Szeredi Subject: [LTP] [PATCH v4 5/6] syscalls/readahead02: test readahead() on an overlayfs file X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Repeat the test case on an overlayfs file. The new test case is a regression test for kernel commit b833a3660394 ("ovl: add ovl_fadvise()") which fixes a regression of readahead() on an overlay file that was introduced by kernel commit 5b910bd615ba ("ovl: fix GPF in swapfile_activate of file from overlayfs over xfs"). Signed-off-by: Amir Goldstein --- .../kernel/syscalls/readahead/readahead02.c | 80 ++++++++++++++++--- 1 file changed, 71 insertions(+), 9 deletions(-) diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c index 24f045900..73c8a6ce6 100644 --- a/testcases/kernel/syscalls/readahead/readahead02.c +++ b/testcases/kernel/syscalls/readahead/readahead02.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -33,8 +34,14 @@ static const char meminfo_fname[] = "/proc/meminfo"; static size_t testfile_size = 64 * 1024 * 1024; static char *opt_fsizestr; static int pagesize; +static unsigned long cached_max; +static int ovl_mounted; #define MNTPOINT "mntpoint" +#define OVL_LOWER MNTPOINT"/lower" +#define OVL_UPPER MNTPOINT"/upper" +#define OVL_WORK MNTPOINT"/work" +#define OVL_MNT MNTPOINT"/ovl" #define MIN_SANE_READAHEAD (4u * 1024u) static const char mntpoint[] = MNTPOINT; @@ -44,6 +51,16 @@ static struct tst_option options[] = { {NULL, NULL, NULL} }; +static struct tcase { + const char *tname; + int use_overlay; +} tcases[] = { + { "readahead on file", 0 }, + { "readahead on overlayfs file", 1 }, +}; + +static int readahead_supported = 1; + static int has_file(const char *fname, int required) { struct stat buf; @@ -97,12 +114,13 @@ static unsigned long get_cached_size(void) return parse_entry(meminfo_fname, entry); } -static void create_testfile(void) +static void create_testfile(int use_overlay) { int fd; char *tmp; size_t i; + sprintf(testfile, "%s/testfile", use_overlay ? OVL_MNT : MNTPOINT); tst_res(TINFO, "creating test file of size: %zu", testfile_size); tmp = SAFE_MALLOC(pagesize); @@ -203,21 +221,33 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, SAFE_CLOSE(fd); } -static void test_readahead(void) +static void test_readahead(unsigned int n) { unsigned long read_bytes, read_bytes_ra; long long usec, usec_ra; - unsigned long cached_max, cached_low, cached, cached_ra; + unsigned long cached_high, cached_low, cached, cached_ra; char proc_io_fname[128]; + struct tcase *tc = &tcases[n]; + + tst_res(TINFO, "Test #%d: %s", n, tc->tname); + sprintf(proc_io_fname, "/proc/%u/io", getpid()); + if (tc->use_overlay && !ovl_mounted) { + tst_res(TCONF, + "overlayfs is not configured in this kernel."); + return; + } + + create_testfile(tc->use_overlay); + /* find out how much can cache hold if we read whole file */ read_testfile(0, testfile, testfile_size, &read_bytes, &usec, &cached); - cached_max = get_cached_size(); + cached_high = get_cached_size(); sync(); drop_caches(); cached_low = get_cached_size(); - cached_max = cached_max - cached_low; + cached_max = MAX(cached_max, cached_high - cached_low); tst_res(TINFO, "read_testfile(0)"); read_testfile(0, testfile, testfile_size, &read_bytes, &usec, &cached); @@ -233,11 +263,14 @@ static void test_readahead(void) read_testfile(1, testfile, testfile_size, &read_bytes_ra, &usec_ra, &cached_ra); if (TST_RET != 0) { - if (TST_ERR == EINVAL) { + if (TST_ERR == EINVAL && + (!tc->use_overlay || !readahead_supported)) { + readahead_supported = 0; tst_res(TCONF, "readahead not supported on %s", tst_device->fs_type); } else { tst_res(TFAIL | TTERRNO, "readahead failed on %s", + tc->use_overlay ? "overlayfs" : tst_device->fs_type); } return; @@ -284,6 +317,28 @@ static void test_readahead(void) } } +static void setup_overlay(void) +{ + int ret; + + /* Setup an overlay mount with lower dir and file */ + SAFE_MKDIR(OVL_LOWER, 0755); + SAFE_MKDIR(OVL_UPPER, 0755); + SAFE_MKDIR(OVL_WORK, 0755); + SAFE_MKDIR(OVL_MNT, 0755); + ret = mount("overlay", OVL_MNT, "overlay", 0, "lowerdir="OVL_LOWER + ",upperdir="OVL_UPPER",workdir="OVL_WORK); + if (ret < 0) { + if (errno == ENODEV) { + tst_res(TINFO, + "overlayfs is not configured in this kernel."); + return; + } + tst_brk(TBROK | TERRNO, "overlayfs mount failed"); + } + ovl_mounted = 1; +} + static void setup(void) { if (opt_fsizestr) @@ -297,8 +352,13 @@ static void setup(void) pagesize = getpagesize(); - sprintf(testfile, "%s/testfile", mntpoint); - create_testfile(); + setup_overlay(); +} + +static void cleanup(void) +{ + if (ovl_mounted) + SAFE_UMOUNT(OVL_MNT); } static struct tst_test test = { @@ -307,6 +367,8 @@ static struct tst_test test = { .mount_device = 1, .mntpoint = mntpoint, .setup = setup, + .cleanup = cleanup, .options = options, - .test_all = test_readahead, + .test = test_readahead, + .tcnt = ARRAY_SIZE(tcases), }; From patchwork Wed Nov 28 16:46:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 1004658 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ugx/RT8k"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 434mly43zLz9s2P for ; Thu, 29 Nov 2018 03:47:26 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id D6AC33E79AD for ; Wed, 28 Nov 2018 17:47:23 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-7.smtp.seeweb.it (in-7.smtp.seeweb.it [217.194.8.7]) by picard.linux.it (Postfix) with ESMTP id 4CB263E79D6 for ; Wed, 28 Nov 2018 17:47:01 +0100 (CET) Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-7.smtp.seeweb.it (Postfix) with ESMTPS id DD3422011F0 for ; Wed, 28 Nov 2018 17:47:00 +0100 (CET) Received: by mail-wm1-x344.google.com with SMTP id 125so3376640wmh.0 for ; Wed, 28 Nov 2018 08:47:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Z2NBqoFgFQkBn0i1AEVDi2XT10+0fmKaDbjIv5o+mpY=; b=ugx/RT8kFT6MMOaePNVS0Xo+bAYTtAW0yjc7r9F9Y0Z7OP8GZvu+mGVfJo+in+yOl3 zq7rB/suYrZSRGqnnj/RpxEbv3he/NrLpjCNyE/vI4ffJgriBpPXv1OhDQQMfiJ2l3Bb mucjwS8GCJ1rH1F6ZojgrSLocoM4xd7pO2b1HEia8JdDHypAyaMbUZFWJiq/iRlNge5b bDaKo2r6zWQYMdc0xO26ur/FnkprgyTtFM0FwS1iCUvLffPwEIyy9fpHmNdQ5xsQRAOB 74mAjUv7jxawMyvyAUArXb+uS5uKlbcM9qdMj1/B4xYXkTOoa+xsZwBUylQKXXsSoKrF x8Cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Z2NBqoFgFQkBn0i1AEVDi2XT10+0fmKaDbjIv5o+mpY=; b=T0nabubr8MMpHUBiLjs26Q588vFeI4GCTJGhQV55mR6kwB/krFYdzpB4disJPnMXaD THPUdPfteKkzDzAVgtbFqtOJwIr7Ye4dxP7GX6mBJg7kiT3YquWZ3I68Ay9pIOWru8k1 4ZSirTxhmyrE1oXq+K1l+yA5Tgf4TW0SJCYiYb9FQfyGmGlz287ntl5Vr7ywjAdAWZOb Li/zURRieGTEF1JwEy1fgVWk64vOMMTRkxfdFgTFzTlWGgHM+q8A0WrMmd1HzBvBxCWO xSQR9dglCfUj476AsXfsAqRw02xVanzBdcZU1f/heJHgOFKoOhibI9WWGKEanCrlLhK0 Z/KA== X-Gm-Message-State: AA+aEWZ37ZTt4g8m6sVmXPS/C7WObs29UKBn9C5zNsR+e/HoybK+i5ui aBa+zUfrmMLIYOKNQMnpS9Q= X-Google-Smtp-Source: AFSGD/WiYsFUMzxnKM6N63mmvfCKX40Xo5B1AFqjTAZ0Zx+DqDx/uvg526LvMeNXqr/67aFOJyEAVw== X-Received: by 2002:a1c:ddc3:: with SMTP id u186mr3334824wmg.110.1543423620344; Wed, 28 Nov 2018 08:47:00 -0800 (PST) Received: from localhost.localdomain ([37.46.46.74]) by smtp.gmail.com with ESMTPSA id 126-v6sm2732945wme.48.2018.11.28.08.46.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Nov 2018 08:46:59 -0800 (PST) From: Amir Goldstein To: Cyril Hrubis Date: Wed, 28 Nov 2018 18:46:45 +0200 Message-Id: <20181128164645.783-7-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181128164645.783-1-amir73il@gmail.com> References: <20181128164645.783-1-amir73il@gmail.com> X-Virus-Scanned: clamav-milter 0.99.2 at in-7.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-7.smtp.seeweb.it Cc: linux-unionfs@vger.kernel.org, ltp@lists.linux.it, Miklos Szeredi Subject: [LTP] [PATCH v4 6/6] syscalls/readahead02: test readahead using posix_fadvise() X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" The call to posix_fadvise(POSIX_FADV_WILLNEED) should have the same effect as the call to readahead() syscall. Repeat the test cases for local file and overlayfs file with posix_fadvise(). The new test case is a regression test for kernel commit b833a3660394 ("ovl: add ovl_fadvise()") which fixes a regression of fadvise() on an overlay file that was introduced by kernel commit 5b910bd615ba ("ovl: fix GPF in swapfile_activate of file from overlayfs over xfs"). Signed-off-by: Amir Goldstein --- .../kernel/syscalls/readahead/readahead02.c | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c index 73c8a6ce6..44475487e 100644 --- a/testcases/kernel/syscalls/readahead/readahead02.c +++ b/testcases/kernel/syscalls/readahead/readahead02.c @@ -54,12 +54,30 @@ static struct tst_option options[] = { static struct tcase { const char *tname; int use_overlay; + int use_fadvise; } tcases[] = { - { "readahead on file", 0 }, - { "readahead on overlayfs file", 1 }, + { "readahead on file", 0, 0 }, + { "readahead on overlayfs file", 1, 0 }, + { "POSIX_FADV_WILLNEED on file", 0, 1 }, + { "POSIX_FADV_WILLNEED on overlayfs file", 1, 1 }, }; +static int fadvise_willneed(int fd, off_t offset, size_t len) +{ + /* Should have the same effect as readahead() syscall */ + return posix_fadvise(fd, offset, len, POSIX_FADV_WILLNEED); +} + +static int libc_readahead(int fd, off_t offset, size_t len) +{ + return readahead(fd, offset, len); +} + +typedef int (*readahead_func_t)(int, off_t, size_t); +static readahead_func_t readahead_func = libc_readahead; + static int readahead_supported = 1; +static int fadvise_supported = 1; static int has_file(const char *fname, int required) { @@ -135,7 +153,6 @@ static void create_testfile(int use_overlay) free(tmp); } - /* read_testfile - mmap testfile and read every page. * This functions measures how many I/O and time it takes to fully * read contents of test file. @@ -163,7 +180,7 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, if (do_readahead) { cached_start = get_cached_size(); do { - TEST(readahead(fd, offset, fsize - offset)); + TEST(readahead_func(fd, offset, fsize - offset)); if (TST_RET != 0) { SAFE_CLOSE(fd); return; @@ -241,6 +258,9 @@ static void test_readahead(unsigned int n) create_testfile(tc->use_overlay); + /* Use either readahead() syscall or POSIX_FADV_WILLNEED */ + readahead_func = tc->use_fadvise ? fadvise_willneed : libc_readahead; + /* find out how much can cache hold if we read whole file */ read_testfile(0, testfile, testfile_size, &read_bytes, &usec, &cached); cached_high = get_cached_size(); @@ -263,13 +283,20 @@ static void test_readahead(unsigned int n) read_testfile(1, testfile, testfile_size, &read_bytes_ra, &usec_ra, &cached_ra); if (TST_RET != 0) { - if (TST_ERR == EINVAL && - (!tc->use_overlay || !readahead_supported)) { + /* posix_fadvise returns error number (not in errno) */ + if (tc->use_fadvise && (TST_ERR = TST_RET) == EINVAL && + (!tc->use_overlay || !fadvise_supported)) { + fadvise_supported = 0; + tst_res(TCONF, "fadvise not supported on %s", + tst_device->fs_type); + } else if (TST_ERR == EINVAL && + (!tc->use_overlay || !readahead_supported)) { readahead_supported = 0; tst_res(TCONF, "readahead not supported on %s", tst_device->fs_type); } else { - tst_res(TFAIL | TTERRNO, "readahead failed on %s", + tst_res(TFAIL | TTERRNO, "%s failed on %s", + tc->use_fadvise ? "fadvise" : "readahead", tc->use_overlay ? "overlayfs" : tst_device->fs_type); }