From patchwork Wed Mar 9 18:26:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thiago Rafael Becker X-Patchwork-Id: 12775409 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62A70C433EF for ; Wed, 9 Mar 2022 18:27:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234965AbiCIS2Z (ORCPT ); Wed, 9 Mar 2022 13:28:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53970 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231716AbiCIS2Z (ORCPT ); Wed, 9 Mar 2022 13:28:25 -0500 Received: from mail-oo1-xc36.google.com (mail-oo1-xc36.google.com [IPv6:2607:f8b0:4864:20::c36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D8D0957B04 for ; Wed, 9 Mar 2022 10:27:24 -0800 (PST) Received: by mail-oo1-xc36.google.com with SMTP id l24-20020a4a8558000000b00320d5a1f938so3902504ooh.8 for ; Wed, 09 Mar 2022 10:27:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=a5MME4KpDziBTxxufAkFOBkSULAPSK1XcRbM0uCC95g=; b=YotN5tXzf+jVHlwTTFLgl4/WKT7Tjqi4XomzYukiJCuoNGzUj5kRRuvUuy5Vgfzbih aH7MCaKY/F+FnErit2c5ZatzQpkttv3E0fIMRS1fPx7fCzHJELSlkmF1/g9ldxe3yIxH f51J6R6ZKYnT8rt8O0YX6ftylWRRugqi5eFc+tIIb1cdj/AbooyHisuCDeIfnV8kolCl gaRz5ZmABCAukWl+M6d0tw07yDLP23edcLvQinlpTIJ2G/DoIiAwLEPCTv+qki7MnHyP sK5APbQLxXKb4n4MR4Yt9XF5NUKVWmghgMOC4Udt28cuU9E0lwMyFeMrILJKzgI8yofG Av8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=a5MME4KpDziBTxxufAkFOBkSULAPSK1XcRbM0uCC95g=; b=Nx6ub7saXR+ziMLM4ZZoH+ZRBhbU+UbVdRNjMXnNpcPuYPnde/97pdTFntw9wn4K38 NfbfKbVTuIuUMDsu2NkT4HfDw/6Hv65r3rwJeGzYmGaTw1YHWJ9XByDAVA0D3hhwPrxW ZDUNtTCMwK0zawMuficTyFQDkkpyo6i/HX2mG2D074nuujFFx/3gWQlGAOAE7Er5w2FH 1GAjExwboM0MYKNqf69Gb3MkhzVhJgqq6oU16UMyqsoIOy2akzSZIIhVL3H2NcRCX6jd 2j3pS9HRn/aLz1qzSiGw2dab5YyDwdceguxbBcJt8c8rV7A3hwHwV1e8hYmF6N+O6jML r1jg== X-Gm-Message-State: AOAM531KkFKJ5Z7ysvLDua2dWuQMA4Q7aUFE0qi6g7IIxDf3fVD3MZi0 I1NClqApxMRzQregXUm6brRDdbQwt+g= X-Google-Smtp-Source: ABdhPJwe6nP6aHS68JrKGp6EsVn5+ayJrzyEIYMuMWWO2Xq8s9nYaFcQFho3gelqsl2a1HC8bUBXlw== X-Received: by 2002:a4a:141:0:b0:31d:8eb3:b2c0 with SMTP id 62-20020a4a0141000000b0031d8eb3b2c0mr495461oor.4.1646850443920; Wed, 09 Mar 2022 10:27:23 -0800 (PST) Received: from nyarly.redhat.com ([179.233.246.234]) by smtp.gmail.com with ESMTPSA id k5-20020a056870a4c500b000d9c2216692sm1213270oal.24.2022.03.09.10.27.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 10:27:23 -0800 (PST) From: Thiago Rafael Becker To: linux-nfs@vger.kernel.org Cc: tbecker@redhat.com, steved@redhat.com, chuck.lever@oracle.com, Thiago Rafael Becker Subject: [RFC PATCH 1/7] Create nfs-readahead-udev Date: Wed, 9 Mar 2022 15:26:47 -0300 Message-Id: <20220309182653.1885252-2-trbecker@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220309182653.1885252-1-trbecker@gmail.com> References: <20220309182653.1885252-1-trbecker@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org This tool is invoked by udev to find and set the readahead value to NFS mounts. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1946283 Signed-off-by: Thiago Rafael Becker --- .gitignore | 1 + configure.ac | 1 + tools/Makefile.am | 2 +- tools/nfs-readahead-udev/Makefile.am | 3 +++ tools/nfs-readahead-udev/main.c | 7 +++++++ 5 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 tools/nfs-readahead-udev/Makefile.am create mode 100644 tools/nfs-readahead-udev/main.c diff --git a/.gitignore b/.gitignore index c89d1cd2..c99269a4 100644 --- a/.gitignore +++ b/.gitignore @@ -61,6 +61,7 @@ utils/statd/statd tools/locktest/testlk tools/getiversion/getiversion tools/nfsconf/nfsconf +tools/nfs-readahead-udev/nfs-readahead-udev support/export/mount.h support/export/mount_clnt.c support/export/mount_xdr.c diff --git a/configure.ac b/configure.ac index e0f5a930..7e5ba5d9 100644 --- a/configure.ac +++ b/configure.ac @@ -737,6 +737,7 @@ AC_CONFIG_FILES([ tools/rpcgen/Makefile tools/mountstats/Makefile tools/nfs-iostat/Makefile + tools/nfs-readahead-udev/Makefile tools/rpcctl/Makefile tools/nfsdclnts/Makefile tools/nfsconf/Makefile diff --git a/tools/Makefile.am b/tools/Makefile.am index c3feabbe..621cde03 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -12,6 +12,6 @@ if CONFIG_NFSDCLD OPTDIRS += nfsdclddb endif -SUBDIRS = locktest rpcdebug nlmtest mountstats nfs-iostat rpcctl nfsdclnts $(OPTDIRS) +SUBDIRS = locktest rpcdebug nlmtest mountstats nfs-iostat rpcctl nfsdclnts nfs-readahead-udev $(OPTDIRS) MAINTAINERCLEANFILES = Makefile.in diff --git a/tools/nfs-readahead-udev/Makefile.am b/tools/nfs-readahead-udev/Makefile.am new file mode 100644 index 00000000..5455e954 --- /dev/null +++ b/tools/nfs-readahead-udev/Makefile.am @@ -0,0 +1,3 @@ +libexec_PROGRAMS = nfs-readahead-udev +nfs_readahead_udev_SOURCES = main.c + diff --git a/tools/nfs-readahead-udev/main.c b/tools/nfs-readahead-udev/main.c new file mode 100644 index 00000000..e454108e --- /dev/null +++ b/tools/nfs-readahead-udev/main.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, char **argv, char **envp) +{ + unsigned int readahead = 128; + printf("%d\n", readahead); +} From patchwork Wed Mar 9 18:26:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thiago Rafael Becker X-Patchwork-Id: 12775411 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92557C433F5 for ; Wed, 9 Mar 2022 18:27:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235486AbiCIS23 (ORCPT ); Wed, 9 Mar 2022 13:28:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54088 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235448AbiCIS20 (ORCPT ); Wed, 9 Mar 2022 13:28:26 -0500 Received: from mail-oo1-xc2e.google.com (mail-oo1-xc2e.google.com [IPv6:2607:f8b0:4864:20::c2e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4C45031206 for ; Wed, 9 Mar 2022 10:27:27 -0800 (PST) Received: by mail-oo1-xc2e.google.com with SMTP id l24-20020a4a8558000000b00320d5a1f938so3902655ooh.8 for ; Wed, 09 Mar 2022 10:27:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=D8TA6wLI8zvEF9+oX9iybr/dM7zq7LTQZx0y/3OKWos=; b=FSAKa/U3q3j3a9rEX4c9yzTSfih/yDV3W8YkC5tMWgF4XQQXKQ5YzB7o3PSI40eCFh QwiMxeOpmbJlRBgYs2N5MnWjLWDCdixFXA/UTrumZcQs7sgn93o/TMSjHHd9RVCG/joX NK1qS8xz2L0NBM7qjtXKavgLKZAsdCx1UHNMfy/5FcXUFpCWHtEU3o4fiMK35mijBGoQ nxGSttiTyJjZwZf8jITqUtd10ooAhljFzJk+8NfQMjNVpDRQarvm4QZzM/rA4XJXg7Vr +aHxuAxAu0kQhbJ0IIFuuNxRS44YRVFpiY1QGh/7cFJlBnvA7TZb9kVbSG0u+Wcs/zs5 0Hkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=D8TA6wLI8zvEF9+oX9iybr/dM7zq7LTQZx0y/3OKWos=; b=fHWyWapzaQSEC3CCFQEGZ0jDeybJZ4NpkcBtwQwYU+sb2+3fE2LUh9CryzpEN9fQBh X/PkLU5fdl+dZyJTPzP+fwe91IIPfQZrbBqgOe//9eBiXG+N1S3CINllwUcfxbyKt/t0 ufEajb8cloDthXNdWlEmugmPU1xRZUDnCrxj7Qu1PWwRULa+ZBzt4Fn5wMPK5BcqUv8e q8NAYXD/jo80AaN+UIAPHrUo4a3UCGaI+fTkFiAvVzSa+k83dRr60CUTLB//lfZ4VLZU MdT9oscnNyDf/wV6/cr7pWsv4lFFrhcPKlIIshQrr0rjYByOfgXIIBobs8AX2eUx1ysb j5Mg== X-Gm-Message-State: AOAM531Ie5dpa8GOwIWk+g2hlX8Npbw8ETO502BG4b8FCW9ZjF5sHPBS bHBLGWbtWFG52G9hdfr+bEw8AuJvDFc= X-Google-Smtp-Source: ABdhPJwvCRypge3aljApIKUo+dGPySmudgBm54LhH+rGnWWbpcNPkCI4b1jtaAgXIozqwxpTq8ky0g== X-Received: by 2002:a4a:d687:0:b0:321:1b4e:60b8 with SMTP id i7-20020a4ad687000000b003211b4e60b8mr490258oot.78.1646850446469; Wed, 09 Mar 2022 10:27:26 -0800 (PST) Received: from nyarly.redhat.com ([179.233.246.234]) by smtp.gmail.com with ESMTPSA id k5-20020a056870a4c500b000d9c2216692sm1213270oal.24.2022.03.09.10.27.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 10:27:26 -0800 (PST) From: Thiago Rafael Becker To: linux-nfs@vger.kernel.org Cc: tbecker@redhat.com, steved@redhat.com, chuck.lever@oracle.com, Thiago Rafael Becker Subject: [RFC PATCH 2/7] readahead: configure udev Date: Wed, 9 Mar 2022 15:26:48 -0300 Message-Id: <20220309182653.1885252-3-trbecker@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220309182653.1885252-1-trbecker@gmail.com> References: <20220309182653.1885252-1-trbecker@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Set the udev rule to call the readahead utility. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1946283 Signed-off-by: Thiago Rafael Becker --- tools/nfs-readahead-udev/99-nfs_bdi.rules.in | 1 + tools/nfs-readahead-udev/Makefile.am | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 tools/nfs-readahead-udev/99-nfs_bdi.rules.in diff --git a/tools/nfs-readahead-udev/99-nfs_bdi.rules.in b/tools/nfs-readahead-udev/99-nfs_bdi.rules.in new file mode 100644 index 00000000..15f8a995 --- /dev/null +++ b/tools/nfs-readahead-udev/99-nfs_bdi.rules.in @@ -0,0 +1 @@ +SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="_libexecdir_/nfs-readahead-udev", ATTR{read_ahead_kb}="%c" diff --git a/tools/nfs-readahead-udev/Makefile.am b/tools/nfs-readahead-udev/Makefile.am index 5455e954..873cc175 100644 --- a/tools/nfs-readahead-udev/Makefile.am +++ b/tools/nfs-readahead-udev/Makefile.am @@ -1,3 +1,11 @@ libexec_PROGRAMS = nfs-readahead-udev nfs_readahead_udev_SOURCES = main.c +udev_rulesdir = /etc/udev/rules.d +udev_rules_DATA = 99-nfs_bdi.rules + +99-nfs_bdi.rules: 99-nfs_bdi.rules.in $(builddefs) + $(SED) "s|_libexecdir_|@libexecdir@|g" 99-nfs_bdi.rules.in > $@ + +clean-local: + $(RM) 99-nfs_bdi.rules From patchwork Wed Mar 9 18:26:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thiago Rafael Becker X-Patchwork-Id: 12775412 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1362FC433EF for ; Wed, 9 Mar 2022 18:27:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235448AbiCIS2a (ORCPT ); Wed, 9 Mar 2022 13:28:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54180 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231230AbiCIS23 (ORCPT ); Wed, 9 Mar 2022 13:28:29 -0500 Received: from mail-ot1-x32e.google.com (mail-ot1-x32e.google.com [IPv6:2607:f8b0:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A57A330F4F for ; Wed, 9 Mar 2022 10:27:29 -0800 (PST) Received: by mail-ot1-x32e.google.com with SMTP id k25-20020a056830151900b005b25d8588dbso2375037otp.4 for ; Wed, 09 Mar 2022 10:27:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ROjYm8CHtJGrhQ+3dI8nO/McT7Gr9+8gLzauzM5HDqs=; b=dwkT8QGCCpHXnzOAFex54+VdX2U80W44fP09CXZHL23Ugwu6YZKuJ0fwOP+9Wgsjaq SJRtsx1QsamVGGAhh5+ky1WrL5Z7TwbuylVMCczU5iZeXxtkXoHhh+WIyAljF+LfTDK2 73SCvNNEN5nd03ygf+wAH3eYhILYOdckcmouhBl+zBzB1acLUbdecVwoYhoUJp2Yq9+h e602XSHkHciKpteZlpgxmGY95TBZ2tRBMqJRcnpjE+pd4uX5oWPSnIL01OUtGQlL7WZJ i9ZqmrRZEmsErYtPlLuF0r/5jXu6b+NjXtTPERna98i8xFV7p+5cFVGDQpebCXJ8jISt /Uww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ROjYm8CHtJGrhQ+3dI8nO/McT7Gr9+8gLzauzM5HDqs=; b=by9vEdb5PUAJ+Je6qccxsFc58j4PB02SYW++kuKOl5uYo0ZVifm2nQVFTMjU3XWa4N +NKW22gurkjTSeUHQHFoYEtD52KvubvlCERNO0KdFXbU34AWnCmVNf9OraKAd/LzTZFY WF/pqfMpxwduOOeMxY8KNaCqFHELI7P5qRTiXTRtLgxxJ8Y3dFU1KuZO544QJyq0FtSI RWuYMUHsAu9DD9gZGRd85aFx0BAPO2lgknhXtS7UmY//Zgp/9UQPslS87Hu8AhB8uo1C Eh5rHTzuk+l9Jb+0JAQk98LLiqc48FRsXoXIHgHUW7PHfGsc0KNaD74vzP5hlzHbT4Fh +Q3A== X-Gm-Message-State: AOAM532kdErc+WmzjJqY8Fw78I8AJPjBv4Jh2Y8xf4jUYzL2qugP2ysX YH3coPXwcin14O5sXPr+ClEOnI1s8aA= X-Google-Smtp-Source: ABdhPJzDUmRuma3QynD7Bi+QQ+gGRkexbMuRLek/6GAh8fBxYJdj2mkNAdMCfho8INa1AMeATsKHEA== X-Received: by 2002:a05:6830:13d8:b0:5af:6e79:560c with SMTP id e24-20020a05683013d800b005af6e79560cmr575142otq.188.1646850448840; Wed, 09 Mar 2022 10:27:28 -0800 (PST) Received: from nyarly.redhat.com ([179.233.246.234]) by smtp.gmail.com with ESMTPSA id k5-20020a056870a4c500b000d9c2216692sm1213270oal.24.2022.03.09.10.27.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 10:27:28 -0800 (PST) From: Thiago Rafael Becker To: linux-nfs@vger.kernel.org Cc: tbecker@redhat.com, steved@redhat.com, chuck.lever@oracle.com, Thiago Rafael Becker Subject: [RFC PATCH 3/7] readahead: create logging facility Date: Wed, 9 Mar 2022 15:26:49 -0300 Message-Id: <20220309182653.1885252-4-trbecker@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220309182653.1885252-1-trbecker@gmail.com> References: <20220309182653.1885252-1-trbecker@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Create logs for nfs-readahead-udev, logging to syslog. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1946283 Signed-off-by: Thiago Rafael Becker --- tools/nfs-readahead-udev/Makefile.am | 2 +- tools/nfs-readahead-udev/log.h | 16 ++++++++++ tools/nfs-readahead-udev/main.c | 8 +++++ tools/nfs-readahead-udev/syslog.c | 47 ++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 tools/nfs-readahead-udev/log.h create mode 100644 tools/nfs-readahead-udev/syslog.c diff --git a/tools/nfs-readahead-udev/Makefile.am b/tools/nfs-readahead-udev/Makefile.am index 873cc175..5078db9a 100644 --- a/tools/nfs-readahead-udev/Makefile.am +++ b/tools/nfs-readahead-udev/Makefile.am @@ -1,5 +1,5 @@ libexec_PROGRAMS = nfs-readahead-udev -nfs_readahead_udev_SOURCES = main.c +nfs_readahead_udev_SOURCES = main.c syslog.c udev_rulesdir = /etc/udev/rules.d udev_rules_DATA = 99-nfs_bdi.rules diff --git a/tools/nfs-readahead-udev/log.h b/tools/nfs-readahead-udev/log.h new file mode 100644 index 00000000..2a14e552 --- /dev/null +++ b/tools/nfs-readahead-udev/log.h @@ -0,0 +1,16 @@ +#ifndef __ra_log_h__ +#define __ra_log_h__ +#include + +extern void log_open(void); +extern void log_close(void); + +extern void debug(const char *, ...); +extern void info(const char *, ...); +extern void notice(const char *, ...); +extern void warn(const char *, ...); +extern void err(const char *, ...); +extern void crit(const char *, ...); +extern void alert(const char *, ...); +extern void emerg(const char *, ...); +#endif diff --git a/tools/nfs-readahead-udev/main.c b/tools/nfs-readahead-udev/main.c index e454108e..dd2c9f8c 100644 --- a/tools/nfs-readahead-udev/main.c +++ b/tools/nfs-readahead-udev/main.c @@ -1,7 +1,15 @@ #include +#include "log.h" + int main(int argc, char **argv, char **envp) { unsigned int readahead = 128; + + log_open(); + + info("Setting the readahead to 128\n"); + + log_close(); printf("%d\n", readahead); } diff --git a/tools/nfs-readahead-udev/syslog.c b/tools/nfs-readahead-udev/syslog.c new file mode 100644 index 00000000..5eeb2579 --- /dev/null +++ b/tools/nfs-readahead-udev/syslog.c @@ -0,0 +1,47 @@ +#include +#include +#include + +#include "log.h" + +#define MSG_SIZE (1024 * sizeof(char)) + +void log_open(void) +{ + openlog("nfs_readahead", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); + setlogmask(LOG_UPTO(LOG_DEBUG)); +} + +void log_close(void) +{ + closelog(); +} + +static void vlog(int level, const char *fmt, va_list *args) +{ + char *msg = malloc(MSG_SIZE); + if (!msg) + return; + + vsnprintf(msg, MSG_SIZE, fmt, *args); + syslog(level, "%s", msg); + + free(msg); +} + +#define GENERATE_LOGGER(name, level) \ + void name(const char *fmt, ...) { \ + va_list args; \ + va_start(args, fmt); \ + vlog(LOG_##level, fmt, &args); \ + va_end(args); \ +} + +GENERATE_LOGGER(debug, DEBUG); +GENERATE_LOGGER(info, INFO); +GENERATE_LOGGER(notice, NOTICE); +GENERATE_LOGGER(warn, WARNING); +GENERATE_LOGGER(err, ERR); +GENERATE_LOGGER(crit, CRIT); +GENERATE_LOGGER(alert, ALERT); +GENERATE_LOGGER(emerg, EMERG); From patchwork Wed Mar 9 18:26:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thiago Rafael Becker X-Patchwork-Id: 12775413 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BF58AC433F5 for ; Wed, 9 Mar 2022 18:27:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235549AbiCIS2c (ORCPT ); Wed, 9 Mar 2022 13:28:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54304 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231230AbiCIS2b (ORCPT ); Wed, 9 Mar 2022 13:28:31 -0500 Received: from mail-ot1-x329.google.com (mail-ot1-x329.google.com [IPv6:2607:f8b0:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 681B631206 for ; Wed, 9 Mar 2022 10:27:32 -0800 (PST) Received: by mail-ot1-x329.google.com with SMTP id 17-20020a9d0611000000b005b251571643so2381925otn.2 for ; Wed, 09 Mar 2022 10:27:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Cw3iv6XGjibkRbBqnfX3hpJe85HzX3v3mvg/CBrmEqs=; b=BXbId7WCi0ZTqZRT7ETj4G0yxAwdMxv0IIN9TDIbxzISSgrPFwxyUGgAlD1NLWdH8/ vl/nx+OlE1+O6hjA0vNJNiAjbcfwbAQYYkW2BigBoV9CnOnAoayZ8/Fb2/nvBhsK8UQP hb9gve297DkAdGEEgdtTnXQXf8tM+5Me1p7OWPodfAmV0SWazJ1tXuTjXgDhXKfMwbB9 xYcUm14meLy2tsSZLcgp/0mx77LV63j0bx+ci/OQjnFk2qDJJwZOwaSdg/I2hftG2g8S UmJ3rw1mR1XgzDMCL+1Bm30Q+kYFcVnF4tuEU948xoPKNACqVxfwGqfXcw82bdGBlTQt g5zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Cw3iv6XGjibkRbBqnfX3hpJe85HzX3v3mvg/CBrmEqs=; b=0GKSE4MYnb217F+ktJEvTFf33ZH+7OV2cGCkISx5rHsCPceOfLfKa+5CfLP0X811Uo AJp51e997myWc+BmYAhCzqZsflKopWdxCsLv1aOVjt9FcudjVJw6TATFtDV7xiVnxXbt pTCReNv7iZBoN5J3NrOhJkSu2CaLpRGWmYROKqUW9Exnylah11HHb6Iky7WSbrWMBIVT H2gCj1MEy1E/vjXuOoUS78McurjjlwvrYFxntg9rlR+fHwRPporu/9E/9PNpJl+kE26d rJ7rWqyP/ibBRpRZ8vJJ4+7eHnVW/+pHIgLF/AIGdmEmr08GojQZZq57re9wk8red1/y UZqg== X-Gm-Message-State: AOAM530t02+5e75rVI4fR6Hq8g1IbdlKfNVeP51kwhSPlHy4rbC6nsFM Wt39XEwUa+3wQGfv4nc04jQX+Q5E4jc= X-Google-Smtp-Source: ABdhPJxv4VJA7riglE0SiCex14eQMYm3UZVThg3hZQ59Ub8D2hlPYaGcZWys+AcYpjRkHy0MKWiS9g== X-Received: by 2002:a9d:4686:0:b0:5ae:e472:2dda with SMTP id z6-20020a9d4686000000b005aee4722ddamr545117ote.317.1646850451534; Wed, 09 Mar 2022 10:27:31 -0800 (PST) Received: from nyarly.redhat.com ([179.233.246.234]) by smtp.gmail.com with ESMTPSA id k5-20020a056870a4c500b000d9c2216692sm1213270oal.24.2022.03.09.10.27.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 10:27:30 -0800 (PST) From: Thiago Rafael Becker To: linux-nfs@vger.kernel.org Cc: tbecker@redhat.com, steved@redhat.com, chuck.lever@oracle.com, Thiago Rafael Becker Subject: [RFC PATCH 4/7] readahead: only set readahead for nfs devices. Date: Wed, 9 Mar 2022 15:26:50 -0300 Message-Id: <20220309182653.1885252-5-trbecker@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220309182653.1885252-1-trbecker@gmail.com> References: <20220309182653.1885252-1-trbecker@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Limit setting the readahead for nfs devices. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1946283 Signed-off-by: Thiago Rafael Becker --- tools/nfs-readahead-udev/99-nfs_bdi.rules.in | 2 +- tools/nfs-readahead-udev/Makefile.am | 1 + tools/nfs-readahead-udev/main.c | 132 ++++++++++++++++++- 3 files changed, 133 insertions(+), 2 deletions(-) diff --git a/tools/nfs-readahead-udev/99-nfs_bdi.rules.in b/tools/nfs-readahead-udev/99-nfs_bdi.rules.in index 15f8a995..744c59be 100644 --- a/tools/nfs-readahead-udev/99-nfs_bdi.rules.in +++ b/tools/nfs-readahead-udev/99-nfs_bdi.rules.in @@ -1 +1 @@ -SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="_libexecdir_/nfs-readahead-udev", ATTR{read_ahead_kb}="%c" +SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="_libexecdir_/nfs-readahead-udev %k", ATTR{read_ahead_kb}="%c" diff --git a/tools/nfs-readahead-udev/Makefile.am b/tools/nfs-readahead-udev/Makefile.am index 5078db9a..551d22e9 100644 --- a/tools/nfs-readahead-udev/Makefile.am +++ b/tools/nfs-readahead-udev/Makefile.am @@ -1,5 +1,6 @@ libexec_PROGRAMS = nfs-readahead-udev nfs_readahead_udev_SOURCES = main.c syslog.c +nfs_readahead_udev_LDFLAGS= -lmount udev_rulesdir = /etc/udev/rules.d udev_rules_DATA = 99-nfs_bdi.rules diff --git a/tools/nfs-readahead-udev/main.c b/tools/nfs-readahead-udev/main.c index dd2c9f8c..bbb408c0 100644 --- a/tools/nfs-readahead-udev/main.c +++ b/tools/nfs-readahead-udev/main.c @@ -1,15 +1,145 @@ #include +#include +#include +#include + +#include +#include #include "log.h" +#ifndef MOUNTINFO_PATH +#define MOUNTINFO_PATH "/proc/self/mountinfo" +#endif + +/* Device information from the system */ +struct device_info { + char *device_number; + dev_t dev; + char *mountpoint; + char *fstype; +}; + +/* Convert a string in the format n:m to a device number */ +static dev_t dev_from_arg(const char *device_number) +{ + char *s = strdup(device_number), *p; + char *maj_s, *min_s; + unsigned int maj, min; + dev_t dev; + + maj_s = p = s; + for ( ; *p != ':'; p++) + ; + + *p = '\0'; + min_s = p + 1; + + maj = strtol(maj_s, NULL, 10); + min = strtol(min_s, NULL, 10); + + dev = makedev(maj, min); + + free(s); + return dev; +} + +#define sfree(ptr) if (ptr) free(ptr) + +/* device_info maintenance */ +static void init_device_info(struct device_info *di, const char *device_number) +{ + di->device_number = strdup(device_number); + di->dev = dev_from_arg(device_number); + di->mountpoint = NULL; + di->fstype = NULL; +} + + +static void free_device_info(struct device_info *di) +{ + sfree(di->mountpoint); + sfree(di->fstype); + sfree(di->device_number); +} + +static int get_mountinfo(const char *device_number, struct device_info *device_info, const char *mountinfo_path) +{ + int ret = 0; + struct libmnt_table *mnttbl; + struct libmnt_fs *fs; + char *target; + + init_device_info(device_info, device_number); + + mnttbl = mnt_new_table(); + + if ((ret = mnt_table_parse_file(mnttbl, mountinfo_path)) < 0) + goto out_free_tbl; + + if ((fs = mnt_table_find_devno(mnttbl, device_info->dev, MNT_ITER_FORWARD)) == NULL) { + ret = ENOENT; + goto out_free_tbl; + } + + if ((target = (char *)mnt_fs_get_target(fs)) == NULL) { + ret = ENOENT; + goto out_free_fs; + } + + device_info->mountpoint = strdup(target); + target = (char *)mnt_fs_get_fstype(fs); + if (target) + device_info->fstype = strdup(target); + +out_free_fs: + mnt_free_fs(fs); +out_free_tbl: + mnt_free_table(mnttbl); + free(device_info->device_number); + device_info->device_number = NULL; + return ret; +} + +static int get_device_info(const char *device_number, struct device_info *device_info) +{ + int ret = ENOENT; + for (int retry_count = 0; retry_count < 10 && ret != 0; retry_count++) + ret = get_mountinfo(device_number, device_info, MOUNTINFO_PATH); + + return ret; +} + int main(int argc, char **argv, char **envp) { + int ret = 0; + struct device_info device; unsigned int readahead = 128; log_open(); - info("Setting the readahead to 128\n"); + if (argc != 2) { + err("Expected device number as argument, got none\n"); + return -EINVAL; + } + + if ((ret = get_device_info(argv[1], &device)) != 0) { + err("Failed to find device %s (%d)\n", argv[1], ret); + goto out; + } + + if (strncmp("nfs", device.fstype, 3) != 0) { + ret = -EINVAL; + info("Not setting the readahead for fstype %s\n", device.fstype); + goto out; + } + + info("Setting %s readahead to 128\n", device.mountpoint); log_close(); printf("%d\n", readahead); + +out: + free_device_info(&device); + return ret; } From patchwork Wed Mar 9 18:26:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thiago Rafael Becker X-Patchwork-Id: 12775415 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 241C5C433F5 for ; Wed, 9 Mar 2022 18:27:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235961AbiCIS2f (ORCPT ); Wed, 9 Mar 2022 13:28:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54494 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232418AbiCIS2e (ORCPT ); Wed, 9 Mar 2022 13:28:34 -0500 Received: from mail-oi1-x232.google.com (mail-oi1-x232.google.com [IPv6:2607:f8b0:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E06C330F4F for ; Wed, 9 Mar 2022 10:27:34 -0800 (PST) Received: by mail-oi1-x232.google.com with SMTP id s207so3498910oie.11 for ; Wed, 09 Mar 2022 10:27:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SObynNw7YBe+H1hb0Ma1wjzgE3CdI080SMoaM+Nrq0I=; b=EVTqWkUlLxJdMqkRXa7DIoCoIkVbE7YycglKvYiOmQFbIJE3JDb9INiakHpfVsyz3B teIrSI/vIHoV4jSSeC+K41DRoU84ZJtZLginrnrPKcBBni5uZfHghjeTC15MGTrrUrRn ChkXOPDwigaBrh/E9H++7pm1kcoW371Jfi9+CTGGSh7CfzPhDs7gpY24tdtoLovs/mXZ FcUhxyacLu/cWl+KEKuYilzh58jVuHr5e4AtsMSDBauQo57hEJGc7UR+VmH5ntznugM9 1rWvK3ra463HH8tY9IkXHk6iLNgDdLItMYJFqrc9ggYPALIH2zm52vqfCiFTquzb3xtE i0Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SObynNw7YBe+H1hb0Ma1wjzgE3CdI080SMoaM+Nrq0I=; b=KgsliNQ9RGSGUCDmp+4ISl1UjVbg6hvD064vG1Hir1xgeyOR/kngvT1zt8SpJAU5aC 4h31LKW2xOymypRsEIgrP9pTYH/avkXHssJNMOHhv/b6KQsov0TvmF7XgzC2OLgxjIsi v3bIrD7I6xJF2cdcsmdSHCDceE9S8tnoZtpIm3xQ/GGPDr8WSgs6A8qDkwvf38CyvFny H1kB1MXgqV9RI5cDQh26/LDn+LMaLKO7DkzQ0ZPm7CsW3mLzw0WYEu9UEupTI+gyIIIF bVTJFCwXS3NxC7ieR1NjYN6ua1PLPJ2tzk4tprj1T5Zy3TkQYFj6Luksfso80svSC18+ 8Zhg== X-Gm-Message-State: AOAM5337wGOGkbE1k4b3Dw3c2iHdo0XYS484s5xtJgfObBShWVqe3tTH Rzp/SSco3yxXXYhxmQOasZp1ory5VcM= X-Google-Smtp-Source: ABdhPJw5h+tZDajZTJESvW8rr2uFVhpPGqk0koXACxtnXX939EqnzPG5H/XCoJd2INd6S/NdZVX6Pw== X-Received: by 2002:a05:6808:ec6:b0:2d2:7782:4f92 with SMTP id q6-20020a0568080ec600b002d277824f92mr560232oiv.31.1646850453986; Wed, 09 Mar 2022 10:27:33 -0800 (PST) Received: from nyarly.redhat.com ([179.233.246.234]) by smtp.gmail.com with ESMTPSA id k5-20020a056870a4c500b000d9c2216692sm1213270oal.24.2022.03.09.10.27.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 10:27:33 -0800 (PST) From: Thiago Rafael Becker To: linux-nfs@vger.kernel.org Cc: tbecker@redhat.com, steved@redhat.com, chuck.lever@oracle.com, Thiago Rafael Becker Subject: [RFC PATCH 5/7] readahead: create the configuration file Date: Wed, 9 Mar 2022 15:26:51 -0300 Message-Id: <20220309182653.1885252-6-trbecker@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220309182653.1885252-1-trbecker@gmail.com> References: <20220309182653.1885252-1-trbecker@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org At this stage, the configuration file only accepts the default value. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1946283 Signed-off-by: Thiago Rafael Becker --- .gitignore | 5 ++ configure.ac | 3 + tools/nfs-readahead-udev/Makefile.am | 16 ++++- tools/nfs-readahead-udev/config_parser.c | 25 ++++++++ tools/nfs-readahead-udev/config_parser.h | 14 +++++ tools/nfs-readahead-udev/list.h | 48 +++++++++++++++ tools/nfs-readahead-udev/main.c | 68 ++++++++++++++++++++- tools/nfs-readahead-udev/parser.y | 78 ++++++++++++++++++++++++ tools/nfs-readahead-udev/readahead.conf | 1 + tools/nfs-readahead-udev/scanner.l | 14 +++++ 10 files changed, 269 insertions(+), 3 deletions(-) create mode 100644 tools/nfs-readahead-udev/config_parser.c create mode 100644 tools/nfs-readahead-udev/config_parser.h create mode 100644 tools/nfs-readahead-udev/list.h create mode 100644 tools/nfs-readahead-udev/parser.y create mode 100644 tools/nfs-readahead-udev/readahead.conf create mode 100644 tools/nfs-readahead-udev/scanner.l diff --git a/.gitignore b/.gitignore index c99269a4..340ee8fb 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ aclocal/ltoptions.m4 aclocal/ltsugar.m4 aclocal/ltversion.m4 aclocal/lt~obsolete.m4 +ylwrap # files generated by configure confdefs.h config.cache @@ -61,7 +62,11 @@ utils/statd/statd tools/locktest/testlk tools/getiversion/getiversion tools/nfsconf/nfsconf +tools/nfs-readahead-udev/99-nfs_bdi.rules tools/nfs-readahead-udev/nfs-readahead-udev +tools/nfs-readahead-udev/parser.c +tools/nfs-readahead-udev/parser.h +tools/nfs-readahead-udev/scanner.c support/export/mount.h support/export/mount_clnt.c support/export/mount_xdr.c diff --git a/configure.ac b/configure.ac index 7e5ba5d9..03cdf8f6 100644 --- a/configure.ac +++ b/configure.ac @@ -300,7 +300,10 @@ AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_LIBTOOL +AC_PROG_YACC AM_PROG_CC_C_O +AM_PROG_LEX + if test "x$cross_compiling" = "xno"; then CC_FOR_BUILD=${CC_FOR_BUILD-${CC-gcc}} diff --git a/tools/nfs-readahead-udev/Makefile.am b/tools/nfs-readahead-udev/Makefile.am index 551d22e9..010350aa 100644 --- a/tools/nfs-readahead-udev/Makefile.am +++ b/tools/nfs-readahead-udev/Makefile.am @@ -1,12 +1,24 @@ libexec_PROGRAMS = nfs-readahead-udev -nfs_readahead_udev_SOURCES = main.c syslog.c +BUILT_SOURCES = parser.c parser.h scanner.c +nfs_readahead_udev_SOURCES = main.c syslog.c config_parser.c parser.y scanner.l nfs_readahead_udev_LDFLAGS= -lmount +AM_YFLAGS = -d -udev_rulesdir = /etc/udev/rules.d +udev_rulesdir = $(sysconfdir)/udev/rules.d udev_rules_DATA = 99-nfs_bdi.rules +ra_confdir = $(sysconfdir) +ra_conf_DATA = readahead.conf + 99-nfs_bdi.rules: 99-nfs_bdi.rules.in $(builddefs) $(SED) "s|_libexecdir_|@libexecdir@|g" 99-nfs_bdi.rules.in > $@ clean-local: $(RM) 99-nfs_bdi.rules + $(RM) parser.c parser.h scanner.c + +parser.$(OBJEXT): CFLAGS += -Wno-strict-prototypes + +scanner.$(OBJEXT): CFLAGS += -Wno-strict-prototypes + +main.$(OBJEXT): CFLAGS += -DSYSCONFDIR=\"@sysconfdir@\" diff --git a/tools/nfs-readahead-udev/config_parser.c b/tools/nfs-readahead-udev/config_parser.c new file mode 100644 index 00000000..24d58a6b --- /dev/null +++ b/tools/nfs-readahead-udev/config_parser.c @@ -0,0 +1,25 @@ +#include +#include +#include "config_parser.h" + +struct config_entry *config_entry_new(void); + +struct config_entry *config_entry_new(void) { + struct config_entry *new = malloc(sizeof(struct config_entry)); + if (!new) { + return NULL; // Make this an err_ptr + } + + memset(new, 0, sizeof(struct config_entry)); + list_init(&new->list); + return new; +} + + +void config_entry_free(struct config_entry *ce) +{ +#define sfree(ce) if (ce) free(ce) + sfree(ce->mountpoint); + sfree(ce->fstype); +#undef sfree +} diff --git a/tools/nfs-readahead-udev/config_parser.h b/tools/nfs-readahead-udev/config_parser.h new file mode 100644 index 00000000..f9f138bb --- /dev/null +++ b/tools/nfs-readahead-udev/config_parser.h @@ -0,0 +1,14 @@ +#ifndef __ra_libparser_h__ +#define __ra_libparser_h__ +#include "list.h" + +struct config_entry { + struct list_head list; + char *mountpoint; + char *fstype; + int readahead; +}; + +extern int parse_config(const char *, struct list_head *config_list); +extern void config_entry_free(struct config_entry *); +#endif diff --git a/tools/nfs-readahead-udev/list.h b/tools/nfs-readahead-udev/list.h new file mode 100644 index 00000000..69239502 --- /dev/null +++ b/tools/nfs-readahead-udev/list.h @@ -0,0 +1,48 @@ +#ifndef __ra_list_h__ +#define __ra_list_h__ +struct list_head +{ + struct list_head *next, *prev; +}; + +static inline void list_init(struct list_head *lh) +{ + lh->next = lh; + lh->prev = lh; +} + +#define LIST_DECLARE(name) \ + struct list_head name; \ + list_init(&name); + +static inline void list_add(struct list_head *l, struct list_head *a) +{ + a->prev = l; + a->next = l->next; + l->next->prev = a; + l->next = a; +} + +static inline void list_del(struct list_head *a) +{ + a->next->prev = a->prev; + a->prev->next = a->next; + a->next = a; + a->prev = a; +} + +#define list_for_each(pos, head) \ + for (pos = (head)->next; pos != (head); pos = pos->next) + +#define list_free(head, free_func) ({ \ + for (struct list_head *__lh = (head)->next; \ + __lh != head; __lh = (head)->next) { \ + list_del(__lh); \ + free_func(__lh); \ + }}) + +#define containerof(p, type, field) ({ \ + const __typeof__(((type *)0)->field) *__ptr = (p); \ + (type *)((char *)__ptr - offsetof(type, field) ); }) + +#endif diff --git a/tools/nfs-readahead-udev/main.c b/tools/nfs-readahead-udev/main.c index bbb408c0..2bd76138 100644 --- a/tools/nfs-readahead-udev/main.c +++ b/tools/nfs-readahead-udev/main.c @@ -2,16 +2,23 @@ #include #include #include +#include #include #include #include "log.h" +#include "list.h" +#include "config_parser.h" #ifndef MOUNTINFO_PATH #define MOUNTINFO_PATH "/proc/self/mountinfo" #endif +#ifndef READAHEAD_CONFIG_FILE +#define READAHEAD_CONFIG_FILE SYSCONFDIR "/readahead.conf" +#endif + /* Device information from the system */ struct device_info { char *device_number; @@ -110,6 +117,60 @@ static int get_device_info(const char *device_number, struct device_info *device return ret; } +static void config_entry_list_head_free(struct list_head *lh) { + struct config_entry *ce = containerof(lh, struct config_entry, list); + config_entry_free(ce); +} + +static int match_config(struct device_info *di, struct config_entry *ce) { +#define FIELD_CMP(field) \ + (ce->field == NULL || (di->field != NULL && strcmp(di->field, ce->field) == 0)) + + if (!FIELD_CMP(mountpoint)) + return 0; + + if (!FIELD_CMP(fstype)) + return 0; + + debug("Device matched with config\n"); + return 1; +#undef FIELD_CMP +} + +static int get_readahead(struct device_info *di, unsigned int *readahead) +{ + LIST_DECLARE(configs); + struct list_head *lh; + int ret = 0; + int default_ra = 0; + + if ((ret = parse_config(READAHEAD_CONFIG_FILE, &configs)) != 0) { + err("Failed to read configuration (%d)\n", ret); + goto out; + } + + list_for_each(lh, &configs) { + struct config_entry *ce = containerof(lh, struct config_entry, list); + if (ce->mountpoint == NULL && ce->fstype == NULL) { + default_ra = ce->readahead; + continue; + } + + if (match_config(di, ce)) { + *readahead = ce->readahead; + goto out; + } + } + + /* fallthrough */ + debug("Setting readahead to default %d\n", default_ra); + *readahead = default_ra; + +out: + list_free(&configs, config_entry_list_head_free); + return ret; +} + int main(int argc, char **argv, char **envp) { int ret = 0; @@ -134,7 +195,12 @@ int main(int argc, char **argv, char **envp) goto out; } - info("Setting %s readahead to 128\n", device.mountpoint); + if ((ret = get_readahead(&device, &readahead)) != 0) { + err("Failed to find readahead (%d)\n", ret); + goto out; + } + + info("Setting %s readahead to %u\n", device.mountpoint, readahead); log_close(); printf("%d\n", readahead); diff --git a/tools/nfs-readahead-udev/parser.y b/tools/nfs-readahead-udev/parser.y new file mode 100644 index 00000000..f6db05c4 --- /dev/null +++ b/tools/nfs-readahead-udev/parser.y @@ -0,0 +1,78 @@ +%{ +#include +#include "parser.h" +#include "config_parser.h" +#include "log.h" + +extern int yylex(); +extern int yyparse(); +extern FILE *yyin; +void yyerror(const char *s); + +// This should be visible only to this file +extern struct config_entry *config_entry_new(void); + +struct config_entry *current; +%} + +%union { + int ival; +} + +%token INT +%token EQ +%token ENDL +%token DEFAULT +%token READAHEAD +%token END_CONFIG 0 + +%% +config: + lines +lines: + lines line | line | endls lines +line: + tokens endls { + struct config_entry *new = config_entry_new(); + list_add(¤t->list, &new->list); + current = new; + } + + +tokens: + tokens token | token + +token: + default | pair + +default: + DEFAULT + +pair: + READAHEAD EQ INT { current->readahead = $3; } + +endls: + endls ENDL | ENDL + +%% +int parse_config(const char *filename, struct list_head *list) +{ + int ret; + + yyin = fopen(filename, "r"); + current = config_entry_new(); + list_add(list, ¤t->list); + + ret = yyparse(); + + /* The parser will create an empty entry that need to be eliminated */ + list_del(¤t->list); + free(current); + fclose(yyin); + + return ret; +} + +void yyerror(const char *s) { + err("Failed to parse configuration: %s", s); +} diff --git a/tools/nfs-readahead-udev/readahead.conf b/tools/nfs-readahead-udev/readahead.conf new file mode 100644 index 00000000..988b30c7 --- /dev/null +++ b/tools/nfs-readahead-udev/readahead.conf @@ -0,0 +1 @@ +default readahead=128 diff --git a/tools/nfs-readahead-udev/scanner.l b/tools/nfs-readahead-udev/scanner.l new file mode 100644 index 00000000..d1ceb90b --- /dev/null +++ b/tools/nfs-readahead-udev/scanner.l @@ -0,0 +1,14 @@ +%{ +#include "parser.h" +#define yyterminate() return END_CONFIG +%} +%option noyywrap +%% +default { return DEFAULT; } +readahead { return READAHEAD; } +[ \t] ; +#[^\n]*\n { return ENDL; } +\n { return ENDL; } +[0-9]+ { yylval.ival = atoi(yytext); return INT; } += { return EQ; } +%% From patchwork Wed Mar 9 18:26:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thiago Rafael Becker X-Patchwork-Id: 12775414 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9377EC433FE for ; Wed, 9 Mar 2022 18:27:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231230AbiCIS2h (ORCPT ); Wed, 9 Mar 2022 13:28:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232418AbiCIS2g (ORCPT ); Wed, 9 Mar 2022 13:28:36 -0500 Received: from mail-ot1-x32e.google.com (mail-ot1-x32e.google.com [IPv6:2607:f8b0:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 21ACC30F4F for ; Wed, 9 Mar 2022 10:27:37 -0800 (PST) Received: by mail-ot1-x32e.google.com with SMTP id k25-20020a056830151900b005b25d8588dbso2375306otp.4 for ; Wed, 09 Mar 2022 10:27:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7EB0ChGWrSTKMmDWNtO9sfhVky9r/cuI00vpfX9eE4A=; b=DL/H78+OtxAohdJQ9kOc8Xbgmxa9GRPhv91R777rStbV7tVYMXPvtWSxn0BGZdqBtE 3bTaLcaSasmyb4asPY1Ij7XKWZbrL8fa8ILOHUfwaNF3CXBTNq8TGkBIPG7uxIo/5gFc Ilhl+QVPzutDsh1EHjsNSe56mo7GuOAIIVfqEpThWTTgGO7Ze8vsYFpJfBzqEsxVfant TLsa4AHTKmWIULZekqOi06a0TeZMW14MgPsVL4gNTAuVZ8ZdCsVMte7f58PJfQXDOGtn 02Figt/3NVGtaZwzPiSkYNVfm9Ad3EH61LxkFMcSZtFsnpVy2DP9udf9DzATz9WPFzR7 +5Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7EB0ChGWrSTKMmDWNtO9sfhVky9r/cuI00vpfX9eE4A=; b=ahmEKVLbLJoecsu/taV9bpDQI5RlSOCXnZiQt+RxlJS74FTpAmOLq+9mjt1jGYvmfX s71PNPIHX/f2ELxb4nib5vM9d2UFkST3Ilp3zW+/YaTQbMn3VJ+dS9f/CTE6hHp5pryU 1FYnbtDD9dCt/vlkq6DySPJNNgi5GJPvYlrxIhwwaQXOFM98k+nM3mj70b5AaBKk6gaH BESdFebuwgNUhk+ZzHL2zsqrezgjlabayZXglIQIJkh+iianUAjY3tfCs6XWHgi3O7du ZM86qslVsA8ZEUOFXOJqgRTGxjRo2cJiv6qhXxorT0ZtVJaXCgTACXEwN3fTWPS12DXg UAsA== X-Gm-Message-State: AOAM53387+I3DQ4x2u5URtXOITdASNEdJzML4zUiBQ4rt2weOrNev/UP dLGo478AfuK3aOazEMQ7N3wia23l1R8= X-Google-Smtp-Source: ABdhPJyiLr+qrxmb8xXHEgkc/sNrChGHZKFs9jpogXbH4OKRjlpHXpbFqBWNORRc26VjWrF1TzZXmg== X-Received: by 2002:a05:6830:304e:b0:5af:f66a:56ee with SMTP id p14-20020a056830304e00b005aff66a56eemr572605otr.226.1646850456259; Wed, 09 Mar 2022 10:27:36 -0800 (PST) Received: from nyarly.redhat.com ([179.233.246.234]) by smtp.gmail.com with ESMTPSA id k5-20020a056870a4c500b000d9c2216692sm1213270oal.24.2022.03.09.10.27.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 10:27:35 -0800 (PST) From: Thiago Rafael Becker To: linux-nfs@vger.kernel.org Cc: tbecker@redhat.com, steved@redhat.com, chuck.lever@oracle.com, Thiago Rafael Becker Subject: [RFC PATCH 6/7] readahead: add mountpoint and fstype options Date: Wed, 9 Mar 2022 15:26:52 -0300 Message-Id: <20220309182653.1885252-7-trbecker@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220309182653.1885252-1-trbecker@gmail.com> References: <20220309182653.1885252-1-trbecker@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Add ways to configure the system by mountpoint or fstype. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1946283 Signed-off-by: Thiago Rafael Becker --- tools/nfs-readahead-udev/parser.y | 15 +++++++++++---- tools/nfs-readahead-udev/scanner.l | 5 +++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/tools/nfs-readahead-udev/parser.y b/tools/nfs-readahead-udev/parser.y index f6db05c4..5951c99d 100644 --- a/tools/nfs-readahead-udev/parser.y +++ b/tools/nfs-readahead-udev/parser.y @@ -10,20 +10,25 @@ extern FILE *yyin; void yyerror(const char *s); // This should be visible only to this file -extern struct config_entry *config_entry_new(void); +extern struct config_entry *config_entry_new(); struct config_entry *current; %} %union { + char *sval; int ival; } +%token STRING %token INT %token EQ %token ENDL %token DEFAULT +%token MOUNTPOINT +%token FSTYPE %token READAHEAD +%token FS %token END_CONFIG 0 %% @@ -35,7 +40,7 @@ line: tokens endls { struct config_entry *new = config_entry_new(); list_add(¤t->list, &new->list); - current = new; + current = new; } @@ -49,9 +54,11 @@ default: DEFAULT pair: - READAHEAD EQ INT { current->readahead = $3; } + MOUNTPOINT EQ STRING { current->mountpoint = $3; } + | FSTYPE EQ FS { current->fstype = $3; } + | READAHEAD EQ INT { current->readahead = $3; } -endls: +endls: endls ENDL | ENDL %% diff --git a/tools/nfs-readahead-udev/scanner.l b/tools/nfs-readahead-udev/scanner.l index d1ceb90b..c6fb3f0c 100644 --- a/tools/nfs-readahead-udev/scanner.l +++ b/tools/nfs-readahead-udev/scanner.l @@ -5,10 +5,15 @@ %option noyywrap %% default { return DEFAULT; } +mountpoint { return MOUNTPOINT; } +fstype { return FSTYPE; } readahead { return READAHEAD; } +nfs4 { yylval.sval = strdup(yytext); return FS; } +nfs { yylval.sval = strdup(yytext); return FS; } [ \t] ; #[^\n]*\n { return ENDL; } \n { return ENDL; } [0-9]+ { yylval.ival = atoi(yytext); return INT; } +[a-zA-Z0-9/]+ { yylval.sval = strdup(yytext); return STRING; } = { return EQ; } %% From patchwork Wed Mar 9 18:26:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thiago Rafael Becker X-Patchwork-Id: 12775416 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4668C433F5 for ; Wed, 9 Mar 2022 18:27:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232418AbiCIS2j (ORCPT ); Wed, 9 Mar 2022 13:28:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232406AbiCIS2j (ORCPT ); Wed, 9 Mar 2022 13:28:39 -0500 Received: from mail-oo1-xc36.google.com (mail-oo1-xc36.google.com [IPv6:2607:f8b0:4864:20::c36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A33F731206 for ; Wed, 9 Mar 2022 10:27:39 -0800 (PST) Received: by mail-oo1-xc36.google.com with SMTP id s203-20020a4a3bd4000000b003191c2dcbe8so3892091oos.9 for ; Wed, 09 Mar 2022 10:27:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lxP5JjR6l+J0pR2HXGGt6Vf+g3lu5RyaQf5yPz3l42M=; b=eUR+HKD3tN+o4Q2HYS/wywAVDowVo6phftAAAPW06RfI8+VXqiq0wnKXkO8Q3R7PN1 dmMfXvAOdKOBJZucVHe99Ptx+Imdt7biO45PLdSj8E8VvZJKe2mUPqTXtAUbPEjh+pJr amyJWKliejhGW/TtIoD4f3KR45eFy9BlUU4ROeG1EUVwBtlZWzlE3lVRb7h3f/FSTAbx 7j95KO+pQwp5TKX30tFV0v5oc2EZ/w2pqbov2NfNGYjXgk47aPsCA2EnDY4BOdRWQyoM 4EsLa0vk/wjCJBf0pT1xtr+imdb1bxnt5hGEIH94jRnxaXba5Iwmx0UU9EgWZwy++lpZ 2k+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lxP5JjR6l+J0pR2HXGGt6Vf+g3lu5RyaQf5yPz3l42M=; b=Z3Xy+CBcl2ZRcPLUxI2e24PPpPcCINqJcBC7uPyYwKvEU1pyawmTh/uGzYXg28Y0K1 b858WqYolNZElKlWta7r8OqLMXQHNx0kBS4vslhOxUsa7qr2IvXQKH+RMx2C5ikFTs8h QoiKjVV6wfE1FBzKQsWOJKxRRoIWBdji97CF28FdPMwNZgNikP31YaQkOQ/eKn87MwO9 tySUvcS00az+13R7b+MGg5wkrx/CX5Ysek/QaaUuesNfQWIq4qlj7ZJMpDh4dKz80jN0 BNCwdpNKnjG5W9xmCp/UtQlazZplpIuIeK2EDgbqPObqkcO5by626NAAQXQZz0NmE2mG MuMg== X-Gm-Message-State: AOAM533yL25Qg3yDsevwlpc7h9JZd7YJTQJQXAGMHOREs3PfAOqjk9DU 4d9VWFvOXLK7yvF6QQbUZq/Iy0nWeKQ= X-Google-Smtp-Source: ABdhPJw7/qzKIEHAuw6IaYTInUDhsMXZCmK5ZViM9uLAQ7Hm5G6d/dImuNh/LzEOoZKFOcIRcT3zKQ== X-Received: by 2002:a05:6870:6189:b0:d9:aea4:a63 with SMTP id a9-20020a056870618900b000d9aea40a63mr462207oah.154.1646850458782; Wed, 09 Mar 2022 10:27:38 -0800 (PST) Received: from nyarly.redhat.com ([179.233.246.234]) by smtp.gmail.com with ESMTPSA id k5-20020a056870a4c500b000d9c2216692sm1213270oal.24.2022.03.09.10.27.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 10:27:38 -0800 (PST) From: Thiago Rafael Becker To: linux-nfs@vger.kernel.org Cc: tbecker@redhat.com, steved@redhat.com, chuck.lever@oracle.com, Thiago Rafael Becker Subject: [RFC PATCH 7/7] readahead: documentation Date: Wed, 9 Mar 2022 15:26:53 -0300 Message-Id: <20220309182653.1885252-8-trbecker@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220309182653.1885252-1-trbecker@gmail.com> References: <20220309182653.1885252-1-trbecker@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1946283 Signed-off-by: Thiago Rafael Becker --- tools/nfs-readahead-udev/Makefile.am | 2 + .../nfs-readahead-udev/nfs-readahead-udev.man | 47 +++++++++++++++++++ tools/nfs-readahead-udev/readahead.conf | 14 ++++++ 3 files changed, 63 insertions(+) create mode 100644 tools/nfs-readahead-udev/nfs-readahead-udev.man diff --git a/tools/nfs-readahead-udev/Makefile.am b/tools/nfs-readahead-udev/Makefile.am index 010350aa..eaa9b90e 100644 --- a/tools/nfs-readahead-udev/Makefile.am +++ b/tools/nfs-readahead-udev/Makefile.am @@ -10,6 +10,8 @@ udev_rules_DATA = 99-nfs_bdi.rules ra_confdir = $(sysconfdir) ra_conf_DATA = readahead.conf +man5_MANS = nfs-readahead-udev.man + 99-nfs_bdi.rules: 99-nfs_bdi.rules.in $(builddefs) $(SED) "s|_libexecdir_|@libexecdir@|g" 99-nfs_bdi.rules.in > $@ diff --git a/tools/nfs-readahead-udev/nfs-readahead-udev.man b/tools/nfs-readahead-udev/nfs-readahead-udev.man new file mode 100644 index 00000000..2477d5b3 --- /dev/null +++ b/tools/nfs-readahead-udev/nfs-readahead-udev.man @@ -0,0 +1,47 @@ +.\" Manpage for nfs-readahead-udev. +.nh +.ad l +.TH man 5 "08 Mar 2022" "1.0" "nfs-readahead-udev man page" +.SH NAME + +nfs-readahead-udev \- Find the readahead for a given NFS mount + +.SH SYNOPSIS + +nfs-readahead-udev + +.SH DESCRIPTION + +\fInfs-readahead-udev\fR is a tool intended to be used with udev to set the \fIread_ahead_kb\fR parameter of NFS mounts, according to the configuration file (see \fICONFIGURATION\fR). \fIdevice\fR is the device number for the NFS backing device as provided by the kernel. + +.SH CONFIGURATION + +The configuration file (\fI/etc/readahead.conf\fR) contains the readahead configuration, and is formatted as follows. + + ::= | + + ::= + + ::= | + + ::= default | + + ::= mountpoint = | fstype = | readahead = + +\fImountpoint\fR is the path in the system where the file system is mounted. + +\fIreadahead\fR is an integer to readahead. + +\fIfstype\fR is either \fInfs\fR or \fInfs4\fR. + +.SH SEE ALSO + +mount.nfs(8), nfs(5), udev(7), bcc-readahead(8) + +.SH BUGS + +No known bugs. + +.SH AUTHOR + +Thiago Rafael Becker diff --git a/tools/nfs-readahead-udev/readahead.conf b/tools/nfs-readahead-udev/readahead.conf index 988b30c7..bce830f1 100644 --- a/tools/nfs-readahead-udev/readahead.conf +++ b/tools/nfs-readahead-udev/readahead.conf @@ -1 +1,15 @@ +# nfs-readahead-udev configuration file. +# +# This file configures the readahead for nfs mounts when those are anounced by the kernel. +# The file is composed on lines that can contain either the default configuration (applied to +# any nfs mount that does not match any of the other lines) or a combination of +# mountpoint= where mountpoint is the mount point for the file system +# fstype= specifies that this configuration should only apply to a specific nfs +# version. +# Every line must contain a readahead option, with the expected readahead value. default readahead=128 + +# mountpoint=/mnt readahead=4194304 +# fstype=nfs readahead=4194304 +# fstype=nfs4 readahead=4194304 +# mountpoint=/mnt fstype=nfs4 readahead=4194304