From patchwork Fri Sep 28 13:06:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 976287 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="QVFovQ/F"; 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 42MBlQ0YP6z9s4Z for ; Fri, 28 Sep 2018 23:06:41 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 8F78D3E6623 for ; Fri, 28 Sep 2018 15:06:39 +0200 (CEST) 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 [IPv6:2001:4b78:1:20::5]) by picard.linux.it (Postfix) with ESMTP id B96BE3E6609 for ; Fri, 28 Sep 2018 15:06:30 +0200 (CEST) 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 AC00F6012D4 for ; Fri, 28 Sep 2018 15:06:29 +0200 (CEST) Received: by mail-wm1-x341.google.com with SMTP id y26-v6so2153750wma.2 for ; Fri, 28 Sep 2018 06:06:29 -0700 (PDT) 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=ViYbgs3N2DNAB+0XO7u24ySEN8b3X/AhABluOtGPPx4=; b=QVFovQ/F6czdNnwxLemOlQKoqdloswSA8V/A/HnTOLodb2YVg+rIYhdfWUbBQ3Lpj7 9YGKuRDtl3f7x6/ZsZ8f938vRA3cmFq40Zn6s+HAbkBazq+tvdhUFq2On67NEUDlxYGC IbRiKLmHk6pCmfUrhUx9Ne1V3RkM4r8fVJ6T3cHTAicu+D9z0LZp6OAaZoI3/Bafo8QC 8wxKqMbzGAXQ4ofG+ld4yLfD3Jidy0oMagPB3bXKuf+1znqurllr0EViU4Ng2sGNny/o d33EV2sOifewwNXJmN6VtvzV1989vi4bBJWHm3A/9Iz9EJAa50mq4z6st7KJTGnp3qPD 3wpg== 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=ViYbgs3N2DNAB+0XO7u24ySEN8b3X/AhABluOtGPPx4=; b=VvjypRgIkWGHm0aYzXLDikqXx6Xw9Q1jw2tNPMA9AmtzFURHdZL526OPq3XEH5rMeb of/jeuhQfOvbBvCZAebSSSiNP/IyWPse36JGd4dhhWDIIPwKagyOpkpsr3FbtSmCF7jc aNhFUkjtrRRVnYBurNebShTLIk2GxeznYByyHuGliVoPpSziV94bs08UirpVGdDPMfMX fd5W7Ek+I6i69hLcAfI+YjOkXKU8D8uy+2oPFHkNiChVwed1FbTF+1RrJOljCQfjxUR4 iyVRVBuACLw7vJENBwt6OCTvvYBHvkCy4MN3VCeg7z/ufop+LLA8xm+HjE00XpJiKIUn PMeA== X-Gm-Message-State: ABuFfojJrRdDTgIkH5nUhwxsk/QjUBjYXeaZa18YU1ePDrrUARiJhB4z yWAGbrXSzrXEtorLpmdyiiA= X-Google-Smtp-Source: ACcGV60OMjM0n/YrzyoYxG9Y4aAXKZrC+oDRuyx7/x2o+y1XIlV/3yBRMFtpjTWrNRaRRWNFyrFG+w== X-Received: by 2002:a7b:c1cd:: with SMTP id a13-v6mr1813702wmj.35.1538139989137; Fri, 28 Sep 2018 06:06:29 -0700 (PDT) Received: from localhost.localdomain ([141.226.14.107]) by smtp.gmail.com with ESMTPSA id o12-v6sm4616415wrj.58.2018.09.28.06.06.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Sep 2018 06:06:28 -0700 (PDT) From: Amir Goldstein To: Cyril Hrubis Date: Fri, 28 Sep 2018 16:06:18 +0300 Message-Id: <20180928130621.28932-2-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180928130621.28932-1-amir73il@gmail.com> References: <20180928130621.28932-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 1/4] syscalls/readahead01: Convert to newlib 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 SPDX-License-Identifier Signed-off-by: Amir Goldstein --- .../kernel/syscalls/readahead/readahead01.c | 119 +++++------------- 1 file changed, 34 insertions(+), 85 deletions(-) diff --git a/testcases/kernel/syscalls/readahead/readahead01.c b/testcases/kernel/syscalls/readahead/readahead01.c index f35019488..682b524b3 100644 --- a/testcases/kernel/syscalls/readahead/readahead01.c +++ b/testcases/kernel/syscalls/readahead/readahead01.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. */ /* @@ -36,47 +17,36 @@ #include #include #include "config.h" -#include "test.h" -#include "safe_macros.h" +#include "tst_test.h" #include "lapi/syscalls.h" -char *TCID = "readahead01"; -int TST_TOTAL = 1; - -option_t options[] = { - {NULL, NULL, NULL} -}; - #if defined(__NR_readahead) -static void setup(void); -static void cleanup(void); - 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, "unexpected failure - " - "returned value = %ld, expected: %ld", - TEST_RETURN, expected_ret); + tst_res(TFAIL, "unexpected failure - " + "returned value = %ld, expected: %ld", + TST_RET, expected_ret); return 1; } static int check_errno(long expected_errno) { - if (TEST_ERRNO == expected_errno) { - tst_resm(TPASS | TTERRNO, "expected failure"); + if (TST_ERR == expected_errno) { + tst_res(TPASS | TTERRNO, "expected failure"); return 0; } - if (TEST_ERRNO == 0) - tst_resm(TFAIL, "call succeeded unexpectedly"); + if (TST_ERR == 0) + tst_res(TFAIL, "call succeeded unexpectedly"); else - tst_resm(TFAIL | TTERRNO, "unexpected failure - " - "expected = %ld : %s, actual", - expected_errno, strerror(expected_errno)); + tst_res(TFAIL | TTERRNO, "unexpected failure - " + "expected = %ld : %s, actual", + expected_errno, strerror(expected_errno)); return 1; } @@ -85,19 +55,17 @@ static void test_bad_fd(void) char tempname[PATH_MAX] = "readahead01_XXXXXX"; int fd; - tst_resm(TINFO, "test_bad_fd -1"); + tst_res(TINFO, "test_bad_fd -1"); TEST(readahead(-1, 0, getpagesize())); check_ret(-1); check_errno(EBADF); - tst_resm(TINFO, "test_bad_fd O_WRONLY"); + tst_res(TINFO, "test_bad_fd O_WRONLY"); fd = mkstemp(tempname); if (fd == -1) - tst_resm(TBROK | TERRNO, "mkstemp failed"); + tst_res(TBROK | TERRNO, "mkstemp failed"); close(fd); - fd = open(tempname, O_WRONLY); - if (fd == -1) - tst_resm(TBROK | TERRNO, "Failed to open testfile"); + fd = SAFE_OPEN(tempname, O_WRONLY); TEST(readahead(fd, 0, getpagesize())); check_ret(-1); check_errno(EBADF); @@ -109,60 +77,41 @@ static void test_invalid_fd(void) { int fd[2]; - tst_resm(TINFO, "test_invalid_fd pipe"); - if (pipe(fd) < 0) - tst_resm(TBROK | TERRNO, "Failed to create pipe"); + tst_res(TINFO, "test_invalid_fd pipe"); + SAFE_PIPE(fd); TEST(readahead(fd[0], 0, getpagesize())); check_ret(-1); check_errno(EINVAL); close(fd[0]); close(fd[1]); - tst_resm(TINFO, "test_invalid_fd socket"); - fd[0] = socket(AF_INET, SOCK_STREAM, 0); - if (fd[0] < 0) - tst_resm(TBROK | TERRNO, "Failed to create socket"); + tst_res(TINFO, "test_invalid_fd socket"); + fd[0] = SAFE_SOCKET(AF_INET, SOCK_STREAM, 0); TEST(readahead(fd[0], 0, getpagesize())); check_ret(-1); check_errno(EINVAL); close(fd[0]); } -int main(int argc, char *argv[]) +void test_readahead(void) { - int lc; - - tst_parse_opts(argc, argv, options, NULL); - - setup(); - for (lc = 0; TEST_LOOPING(lc); lc++) { - tst_count = 0; - test_bad_fd(); - test_invalid_fd(); - } - cleanup(); - tst_exit(); + test_bad_fd(); + test_invalid_fd(); } static void setup(void) { - tst_require_root(); - tst_tmpdir(); - /* check if readahead syscall is supported */ - ltp_syscall(__NR_readahead, 0, 0, 0); - - TEST_PAUSE; + tst_syscall(__NR_readahead, 0, 0, 0); } -static void cleanup(void) -{ - tst_rmdir(); -} +static struct tst_test test = { + .needs_root = 1, + .needs_tmpdir = 1, + .setup = setup, + .test_all = test_readahead, +}; #else /* __NR_readahead */ -int main(void) -{ - tst_brkm(TCONF, NULL, "System doesn't support __NR_readahead"); -} + TST_TEST_TCONF("System doesn't support __NR_readahead"); #endif From patchwork Fri Sep 28 13:06:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 976288 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="mi5irKhD"; 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 42MBlX3gpGz9s1x for ; Fri, 28 Sep 2018 23:06:48 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id C85753E782D for ; Fri, 28 Sep 2018 15:06:45 +0200 (CEST) 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 [IPv6:2001:4b78:1:20::4]) by picard.linux.it (Postfix) with ESMTP id 049E73E6630 for ; Fri, 28 Sep 2018 15:06:32 +0200 (CEST) Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) (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 514D1100174C for ; Fri, 28 Sep 2018 15:06:31 +0200 (CEST) Received: by mail-wm1-x342.google.com with SMTP id 189-v6so1843891wmw.2 for ; Fri, 28 Sep 2018 06:06:31 -0700 (PDT) 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=n/aOFde7G0FG30ioa/FRDFlU8NnXa2/vpFZztbWOhnM=; b=mi5irKhDBJsholK13ji8ZsPsOniPWW3bYAMYDMrJlsNnB7+8TT4PvC6gNY7CsNuxX8 wi1QqlQNKCYZo+50gch8cdOOIbOMbkRBiHvtI64eC+sR82UmTvqzpy6BcD28ikR8FqT7 QZXT2Vd86wdLqpL7mFOynWmLMpHjgh8+2sv8I34lY19hNjm1+hhKElb8hoOCES3Wf+CO ElU/9VGekgwDaTvkklpfbX+FNc3mAKuCiJ2Wg2ovsqnOHY/0ZKjSubxV4YKyzPGXPWug zSEi7WqKsHu6s9c6wu1RiQxjzjm/jkvLMgHXGOfFvioXBrbRd4DDxGPVZ6MEW/reUwU2 /hMw== 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=n/aOFde7G0FG30ioa/FRDFlU8NnXa2/vpFZztbWOhnM=; b=r3IAXc0ZMn05HuiTUD6giBkGR8MPijgUndVrdLvRws1MekGuPSg0dra25veL7PuRvv /452DnFMvVrEu3hJ3BRG1okJ4ehLg40HruA5MVg3AgthGUdXLGvCfvuos7JbvshOgEsb wZdGW6y49poxU3ysd7ZiX4j9KCyshVOMxnKQNBpH5GVKgPvJEX8yS0/CR9ylt4Uw1cBh b26bw9Zh0zS6FvpMSJ2tUkHg6ws82X11GeaokDU4YYQQWw6BR6CTxxFMe1KQ2AUWSeSI Sp3OQIUpAcitCiJK79EfYr2A/bxgqZMgQY47GDzfxWfUsFuYr8Q7ecocm7Y0exW+aDSb fTNQ== X-Gm-Message-State: ABuFfohULPI0xGuDjLgbuohcPkoBC4inJVFh/QcnswUhrMYy2HOjc7wL VNCcOoDzhl4ePohXk3iefdhujaIx X-Google-Smtp-Source: ACcGV606vmEUfvM8P2OOoFbUD/G+JopxSepciqLKfa+QfA4uPJF+SE0LR+tjKK8lhAflYCAmGfOp4w== X-Received: by 2002:a1c:32c4:: with SMTP id y187-v6mr1679928wmy.31.1538139990620; Fri, 28 Sep 2018 06:06:30 -0700 (PDT) Received: from localhost.localdomain ([141.226.14.107]) by smtp.gmail.com with ESMTPSA id o12-v6sm4616415wrj.58.2018.09.28.06.06.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Sep 2018 06:06:30 -0700 (PDT) From: Amir Goldstein To: Cyril Hrubis Date: Fri, 28 Sep 2018 16:06:19 +0300 Message-Id: <20180928130621.28932-3-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180928130621.28932-1-amir73il@gmail.com> References: <20180928130621.28932-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 2/4] 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 Signed-off-by: Amir Goldstein --- .../kernel/syscalls/readahead/readahead02.c | 246 +++++------------- 1 file changed, 70 insertions(+), 176 deletions(-) diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c index c9d92a6a4..4132b4de1 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,55 @@ #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" +static const char mntpoint[] = "mntpoint"; #define MIN_SANE_READAHEAD (4u * 1024u) -option_t options[] = { - {"s:", &opt_fsize, &opt_fsizestr}, +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 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 +111,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 +154,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 +171,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 +181,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 +205,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 +237,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 +247,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 +255,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 +281,42 @@ 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(); -} +static struct tst_test test = { + .needs_root = 1, + .needs_tmpdir = 1, + .mount_device = 1, + .mntpoint = mntpoint, + .setup = setup, + .options = options, + .test_all = test_readahead, +}; #else /* __NR_readahead */ -int main(void) -{ - tst_brkm(TCONF, NULL, "System doesn't support __NR_readahead"); -} + TST_TEST_TCONF("System doesn't support __NR_readahead"); #endif From patchwork Fri Sep 28 13:06:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 976289 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="l2JHcVlX"; 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 42MBlf4pVLz9s1x for ; Fri, 28 Sep 2018 23:06:54 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id C1CFF3E783E for ; Fri, 28 Sep 2018 15:06:51 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-6.smtp.seeweb.it (in-6.smtp.seeweb.it [217.194.8.6]) by picard.linux.it (Postfix) with ESMTP id 4AD0E3E70D8 for ; Fri, 28 Sep 2018 15:06:33 +0200 (CEST) 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-6.smtp.seeweb.it (Postfix) with ESMTPS id C7065140005D for ; Fri, 28 Sep 2018 15:06:32 +0200 (CEST) Received: by mail-wm1-x343.google.com with SMTP id o2-v6so2127833wmh.5 for ; Fri, 28 Sep 2018 06:06:32 -0700 (PDT) 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=IAScHO7R/RKaFbFtGR4jFOM885xjrc/nSlk28UxBtgA=; b=l2JHcVlXw8x3Gu5s1yVu8DM6ZGW1erpG7kdKOKDhPubGFnRB9jijV3tRFnwUeXr6SG JKJ2tcITh8MCdGtNZ7EKk+tMhDL2DcqiHyGfA88NlZtjR4nUXXE6RU7MHMk01n1T1kXX RXq0h19c57ajl8TjISzdc9VHel/9D0IODjLstZJvjo7kwt1uqJamO19yPqQNBI6pSDfC Te1jYp1Ul1bPqFT0qTgK0jkEzybAKfeG2bhC0Rq9Yp3gr6gq0gK5qs24vNihjhUTeUeb L9q0Ij+7KTrN2uq1UuU0Vl9nfil1O5V175BevLMexidIPnTI0tstYyxTHYWWFehTYyYh 7Q6g== 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=IAScHO7R/RKaFbFtGR4jFOM885xjrc/nSlk28UxBtgA=; b=YS4pIvHxfxpfogn0SA9Uy42o80MVjnYXfSpQ1Wkp9b7Fhvkf7g5qQQF5TDX/CMHntI U98anytlqbd106/CJPYklBqsT1wbAL+ZPBgt1EBIS7+n2Ju5ycXI5DduAcAjw1ipK2dp 84y5Wi0VKzoqkRVpZYXenkr7Tx8d6xmvoLx5w5W3JXGAMmoNQ5dwVT4Vc3KlgcpHhHFc ue2tZcPGs5fHEBLWFlAVmG15fDvOwipRUnB5mMzOg72+tbG8QLC1AMebIwvsI6yE5L8a gmQfJgBMsy7QPbgzP76TlVgc4NLCMN+Cb9ZsEEssqLXAHTymg9aXpp4ilFxFEHP/Zklb T7EA== X-Gm-Message-State: ABuFfogoN6FZFlXW0uV18ItTob4cYnz0qk/DKguT33A0/e9S9OR0Mx93 +vOvk1gBUTmGbtZ9cnmVaLo= X-Google-Smtp-Source: ACcGV630RWsgGfygo9yO4F/TRRNzHXAti7+WKzhrq7Kge/xEGGAvXlRRL5g5fsDhpckMSDbLzpFfPA== X-Received: by 2002:a1c:908b:: with SMTP id s133-v6mr1663429wmd.69.1538139992286; Fri, 28 Sep 2018 06:06:32 -0700 (PDT) Received: from localhost.localdomain ([141.226.14.107]) by smtp.gmail.com with ESMTPSA id o12-v6sm4616415wrj.58.2018.09.28.06.06.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Sep 2018 06:06:31 -0700 (PDT) From: Amir Goldstein To: Cyril Hrubis Date: Fri, 28 Sep 2018 16:06:20 +0300 Message-Id: <20180928130621.28932-4-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180928130621.28932-1-amir73il@gmail.com> References: <20180928130621.28932-1-amir73il@gmail.com> X-Virus-Scanned: clamav-milter 0.99.2 at in-6.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-6.smtp.seeweb.it Cc: linux-unionfs@vger.kernel.org, ltp@lists.linux.it, Miklos Szeredi Subject: [LTP] [PATCH 3/4] 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 | 55 +++++++++++++++++-- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c index 4132b4de1..191116f62 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 @@ -34,9 +35,15 @@ static const char meminfo_fname[] = "/proc/meminfo"; static size_t testfile_size = 64 * 1024 * 1024; static char *opt_fsizestr; static int pagesize; +static int ovl_mounted; #define MNTPOINT "mntpoint" -static const char mntpoint[] = "mntpoint"; +#define OVL_LOWER MNTPOINT"/lower" +#define OVL_UPPER MNTPOINT"/upper" +#define OVL_WORK MNTPOINT"/work" +#define OVL_MNT MNTPOINT"/ovl" + +static const char mntpoint[] = MNTPOINT; #define MIN_SANE_READAHEAD (4u * 1024u) static struct tst_option options[] = { @@ -109,12 +116,39 @@ static unsigned long get_cached_size(void) return parse_entry(meminfo_fname, entry); } -static void create_testfile(void) +static int 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(TCONF, + "overlayfs is not configured in this kernel."); + return ret; + } + tst_brk(TBROK | TERRNO, "overlayfs mount failed"); + } + ovl_mounted = 1; + return 0; +} + +static int create_testfile(unsigned int use_overlay) { int fd; char *tmp; size_t i; + if (use_overlay && setup_overlay() != 0) + return -1; + + sprintf(testfile, "%s/testfile", use_overlay ? OVL_MNT : MNTPOINT); tst_res(TINFO, "creating test file of size: %zu", testfile_size); tmp = SAFE_MALLOC(pagesize); @@ -127,6 +161,7 @@ static void create_testfile(void) SAFE_FSYNC(fd); SAFE_CLOSE(fd); free(tmp); + return 0; } @@ -221,7 +256,7 @@ 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 use_overlay) { unsigned long read_bytes, read_bytes_ra; long usec, usec_ra; @@ -229,6 +264,9 @@ static void test_readahead(void) char proc_io_fname[128]; sprintf(proc_io_fname, "/proc/%u/io", getpid()); + if (create_testfile(use_overlay) != 0) + return; + /* 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(); @@ -302,9 +340,12 @@ static void setup(void) tst_syscall(__NR_readahead, 0, 0, 0); pagesize = getpagesize(); +} - sprintf(testfile, "%s/testfile", mntpoint); - create_testfile(); +static void cleanup(void) +{ + if (ovl_mounted) + SAFE_UMOUNT(OVL_MNT); } static struct tst_test test = { @@ -313,8 +354,10 @@ static struct tst_test test = { .mount_device = 1, .mntpoint = mntpoint, .setup = setup, + .cleanup = cleanup, .options = options, - .test_all = test_readahead, + .test = test_readahead, + .tcnt = 2, /* Repeat with overlayfs */ }; #else /* __NR_readahead */ From patchwork Fri Sep 28 13:06:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 976290 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="ul0A/kau"; 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 42MBll2Pcxz9s1x for ; Fri, 28 Sep 2018 23:06:59 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id A6D7E3E791D for ; Fri, 28 Sep 2018 15:06:55 +0200 (CEST) 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 B81123E7815 for ; Fri, 28 Sep 2018 15:06:34 +0200 (CEST) Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) (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 5583C201350 for ; Fri, 28 Sep 2018 15:06:34 +0200 (CEST) Received: by mail-wm1-x342.google.com with SMTP id 206-v6so2156107wmb.5 for ; Fri, 28 Sep 2018 06:06:34 -0700 (PDT) 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=l/fIH4JMETaUfgORMNfvxbo5LGTu0qglN5wAoaYWWm0=; b=ul0A/kauILaWRHYum/Lkhx/aCRu9W8MLjZubjocV5qCqsD2T15P16rNwmkTChcFtur eEH4cwV/Q6hcHCEcl427I4jAolfB17FEZ3d692Tb8TLY6bPDHR6TJs7I6zzRZnCtxJbb Mus/Bd/jng4N0+E7m9AKizOUU2UmYe8sXxAY311vDBn5hial6dA0qwhwZVHsBVrRXmag KacvTZ2SZIeDHLR06Ud6TZ+liOzAVC2/icO5qlCyI0x2SbJn+BLu35eApeaEF+yoYAqg 57q9u+Qyi0bsueC+eSrKmhPtnE13Zp7qHIJyMpgSXs3b5GhPnd5OYZv7jPLf2ucGDepW iDbA== 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=l/fIH4JMETaUfgORMNfvxbo5LGTu0qglN5wAoaYWWm0=; b=U69gplNepabfihO2ncOZDqUJ602AG/qea/BzcaxYkKpkqMI1nI8XALjUx9wRbVAw1w 8I8vKKW+5N4pYAGnnis5f3iLMJ1gRELHIsTlOku6gbZvLQh0bAAQn3tZ9A4U+GfMMvRu FA/CYbWjvWcoQNTcr8sBowaaMAaXsZwxxtN8oU5pROlvrQCOpzUNKN1DSxiaSvFMxrTw l6Y/LnQjC9Wqtelxl6hAWjWPguvDXbDGuBs+tl5jSS/qIl3ZqujFqRhxZlOkDdcTh1Wu uwSG8WIAMGidsZtYKK56dK0lrLtNnXbEP1h7AdlGd8479R88yihYrDUPCsbbM+VaOCba VKNg== X-Gm-Message-State: ABuFfojjVFeIjrHmld5KIRAQ3cy3tivyG+Q4A/wyQrIfwNyOXN5EdV+v LY1OqIw9/VxrFqGH8oTd0r7bVUln X-Google-Smtp-Source: ACcGV60AeEpaMwls4npaRg/7XOP6alePQQW/gGHCcOAiF7kDenz6C7jXvnVC8VkWBnNVyabOwbIBhQ== X-Received: by 2002:a1c:318b:: with SMTP id x133-v6mr1819219wmx.145.1538139993770; Fri, 28 Sep 2018 06:06:33 -0700 (PDT) Received: from localhost.localdomain ([141.226.14.107]) by smtp.gmail.com with ESMTPSA id o12-v6sm4616415wrj.58.2018.09.28.06.06.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Sep 2018 06:06:33 -0700 (PDT) From: Amir Goldstein To: Cyril Hrubis Date: Fri, 28 Sep 2018 16:06:21 +0300 Message-Id: <20180928130621.28932-5-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180928130621.28932-1-amir73il@gmail.com> References: <20180928130621.28932-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 4/4] 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 | 57 +++++++++++++++++-- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c index 191116f62..9ebed359d 100644 --- a/testcases/kernel/syscalls/readahead/readahead02.c +++ b/testcases/kernel/syscalls/readahead/readahead02.c @@ -51,6 +51,42 @@ static struct tst_option options[] = { {NULL, NULL, NULL} }; +#ifndef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 32 +#endif + +#ifndef __NR_fadvise64 +#define __NR_fadvise64 0 +#endif + +static struct tcase { + const char *tname; + int use_overlay; + int use_fadvise; +} tcases[] = { + { "readahead on file", 0, 0 }, + { "readahead on overlayfs file", 1, 0 }, +/* Check this system has fadvise64 system which is used in posix_fadvise. */ +#if ((_FILE_OFFSET_BITS == 64) || (__NR_fadvise64 != 0)) + { "POSIX_FADV_WILLNEED on file", 0, 1 }, + { "POSIX_FADV_WILLNEED on overlayfs file", 1, 1 }, +#endif +}; + +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 check_ret(long expected_ret) { if (expected_ret == TST_RET) { @@ -120,6 +156,9 @@ static int setup_overlay(void) { int ret; + if (ovl_mounted) + return 0; + /* Setup an overlay mount with lower dir and file */ SAFE_MKDIR(OVL_LOWER, 0755); SAFE_MKDIR(OVL_UPPER, 0755); @@ -139,7 +178,7 @@ static int setup_overlay(void) return 0; } -static int create_testfile(unsigned int use_overlay) +static int create_testfile(int use_overlay) { int fd; char *tmp; @@ -164,7 +203,6 @@ static int create_testfile(unsigned int use_overlay) return 0; } - /* 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. @@ -194,7 +232,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) { check_ret(0); break; @@ -256,17 +294,24 @@ static void read_testfile(int do_readahead, const char *fname, size_t fsize, SAFE_CLOSE(fd); } -static void test_readahead(unsigned int use_overlay) +static void test_readahead(unsigned int n) { unsigned long read_bytes, read_bytes_ra; long usec, usec_ra; unsigned long cached_max, 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 (create_testfile(use_overlay) != 0) + if (create_testfile(tc->use_overlay) != 0) return; + /* 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_max = get_cached_size(); @@ -357,7 +402,7 @@ static struct tst_test test = { .cleanup = cleanup, .options = options, .test = test_readahead, - .tcnt = 2, /* Repeat with overlayfs */ + .tcnt = ARRAY_SIZE(tcases), }; #else /* __NR_readahead */