From patchwork Mon Feb 8 21:49:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 41974 X-Patchwork-Delegate: carlos@redhat.com Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3A3B5395041B; Mon, 8 Feb 2021 21:50:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3A3B5395041B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1612821012; bh=REkQHxx01CgUQ9MyOD4eykOaSvSNPWE8j8gZrrH4zjA=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=XXIHV2xntRav8bJcgoV48dXInpAsNHZJiLNUIIhjZDvvYunWhRBNlyGKFhdYI4iha ITyLuMBstT7Q+Uok+Yyg5/tDDmtCMziIlAKGRNIRcA+9HdFb/1kQ+x0sNvZqKQMg64 rLOkQ5rtDp9PSTE1E8xmbAGzCzJnsxHT0EDVq7bQ= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qt1-x829.google.com (mail-qt1-x829.google.com [IPv6:2607:f8b0:4864:20::829]) by sourceware.org (Postfix) with ESMTPS id 9AB9C393C853 for ; Mon, 8 Feb 2021 21:50:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 9AB9C393C853 Received: by mail-qt1-x829.google.com with SMTP id o21so2635864qtr.3 for ; Mon, 08 Feb 2021 13:50:09 -0800 (PST) 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:mime-version:content-transfer-encoding; bh=REkQHxx01CgUQ9MyOD4eykOaSvSNPWE8j8gZrrH4zjA=; b=QuIwTOrWvMjMngSnDyqinUpQrE975JbdddHqQFZFDQEI1hq/ORV8QHQQKhI++5capF /qi5OiMXnDuWGOyYAVgNfKY1NmJIrMHzWBeM/eUHTgF13MBR6ov2BSuuen6AMyrXep2P 8VZ8UIin0+oo7EyRbC8kqs58HUmmZyiOIfZrXxgSHvwrGvaBdJk54x2fVgZXnB8HMldR as5uevqaRKuBXlbNmkpqIejTWAF7PnjLWOcS19onC1b2KNVmtEhjIqqWPjqIeT4Cjnjn ahzpZfb5IDooLogtHqzywvFws7YUA95Ogiwgpp9KUVGFT6x/Z+n99LDUReDmjevMCdIh juzA== X-Gm-Message-State: AOAM532Rc75qucDfUMfh04YOaq1OWT+yVVFFhaY1a6blyWM+Cw4hLKr5 Eh9hpXoZKlkg5aR9jPxWJ8dJAbxEmImPjw== X-Google-Smtp-Source: ABdhPJyTQvsWFUBWJEI3GYFC1xJGsLvNPNJUUjll5IIAlqekrVA9RIXGHgoMoONZwQOloOTDGyD4OQ== X-Received: by 2002:ac8:7151:: with SMTP id h17mr13881760qtp.291.1612821008897; Mon, 08 Feb 2021 13:50:08 -0800 (PST) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id e15sm12720078qtq.43.2021.02.08.13.50.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Feb 2021 13:50:08 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH 08/10] linux: Consolidate internal_statvfs Date: Mon, 8 Feb 2021 18:49:34 -0300 Message-Id: <20210208214936.1502047-9-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210208214936.1502047-1-adhemerval.zanella@linaro.org> References: <20210208214936.1502047-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Remove the internal_statvfs64.c and open code the implementation on internal_statvfs.c. The alpha is now unrequired, the generic implementation also handles it. Also, removed unused includes on internal_statvfs.c, and remove unused arguments on __internal_statvfs{64}. Reviewed-by: Carlos O'Donell --- sysdeps/unix/sysv/linux/Makefile | 2 +- .../sysv/linux/alpha/internal_statvfs64.c | 1 - sysdeps/unix/sysv/linux/fstatvfs.c | 2 +- sysdeps/unix/sysv/linux/fstatvfs64.c | 2 +- sysdeps/unix/sysv/linux/internal_statvfs.c | 70 +++++++++++++------ sysdeps/unix/sysv/linux/internal_statvfs.h | 8 +-- sysdeps/unix/sysv/linux/internal_statvfs64.c | 4 -- sysdeps/unix/sysv/linux/statvfs.c | 2 +- sysdeps/unix/sysv/linux/statvfs64.c | 2 +- 9 files changed, 56 insertions(+), 37 deletions(-) delete mode 100644 sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/internal_statvfs64.c diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index a0a6dcef17..488114a41e 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -273,7 +273,7 @@ CFLAGS-ypclnt.c = -DUSE_BINDINGDIR=1 endif ifeq ($(subdir),io) -sysdep_routines += xstatconv internal_statvfs internal_statvfs64 \ +sysdep_routines += xstatconv internal_statvfs \ sync_file_range fallocate fallocate64 \ close_nocancel fcntl_nocancel \ open_nocancel open64_nocancel \ diff --git a/sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c b/sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c deleted file mode 100644 index 81d18f7bb2..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/fstatvfs.c b/sysdeps/unix/sysv/linux/fstatvfs.c index 0f56a13ca9..ba3fd22cfb 100644 --- a/sysdeps/unix/sysv/linux/fstatvfs.c +++ b/sysdeps/unix/sysv/linux/fstatvfs.c @@ -33,7 +33,7 @@ __fstatvfs (int fd, struct statvfs *buf) return -1; /* Convert the result. */ - __internal_statvfs (NULL, buf, &fsbuf, fd); + __internal_statvfs (buf, &fsbuf); /* We signal success if the statfs call succeeded. */ return 0; diff --git a/sysdeps/unix/sysv/linux/fstatvfs64.c b/sysdeps/unix/sysv/linux/fstatvfs64.c index b95745e8b8..ba869f594c 100644 --- a/sysdeps/unix/sysv/linux/fstatvfs64.c +++ b/sysdeps/unix/sysv/linux/fstatvfs64.c @@ -33,7 +33,7 @@ __fstatvfs64 (int fd, struct statvfs64 *buf) return -1; /* Convert the result. */ - __internal_statvfs64 (NULL, buf, &fsbuf, fd); + __internal_statvfs64 (buf, &fsbuf); return 0; } diff --git a/sysdeps/unix/sysv/linux/internal_statvfs.c b/sysdeps/unix/sysv/linux/internal_statvfs.c index 4d9064141c..39fcb5d429 100644 --- a/sysdeps/unix/sysv/linux/internal_statvfs.c +++ b/sysdeps/unix/sysv/linux/internal_statvfs.c @@ -16,37 +16,61 @@ License along with the GNU C Library; if not, see . */ -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include "internal_statvfs.h" -#include "linux_fsinfo.h" -#include - +#include +#include +#include +#include +#include /* Special internal-only bit value. */ -#define ST_VALID 0x0020 +# define ST_VALID 0x0020 - -#ifndef STATFS -# define STATFS statfs -# define STATVFS statvfs -# define INTERNAL_STATVFS __internal_statvfs -#else -extern int __statvfs_getflags (const char *name, int fstype, int fd); +#if !STATFS_IS_STATFS64 +void +__internal_statvfs (struct statvfs *buf, const struct statfs *fsbuf) +{ + /* Now fill in the fields we have information for. */ + buf->f_bsize = fsbuf->f_bsize; + /* Linux has the f_frsize size only in later version of the kernel. + If the value is not filled in use f_bsize. */ + buf->f_frsize = fsbuf->f_frsize ?: fsbuf->f_bsize; + buf->f_blocks = fsbuf->f_blocks; + buf->f_bfree = fsbuf->f_bfree; + buf->f_bavail = fsbuf->f_bavail; + buf->f_files = fsbuf->f_files; + buf->f_ffree = fsbuf->f_ffree; + if (sizeof (buf->f_fsid) == sizeof (fsbuf->f_fsid)) + /* The shifting uses 'unsigned long long int' even though the target + field might only have 32 bits. This is OK since the 'if' branch + is not used in this case but the compiler would still generate + warnings. */ + buf->f_fsid = ((fsbuf->f_fsid.__val[0] + & ((1ULL << (8 * sizeof (fsbuf->f_fsid.__val[0]))) - 1)) + | ((unsigned long long int) fsbuf->f_fsid.__val[1] + << (8 * (sizeof (buf->f_fsid) + - sizeof (fsbuf->f_fsid.__val[0]))))); + else + /* We cannot help here. The statvfs element is not large enough to + contain both words of the statfs f_fsid field. */ + buf->f_fsid = fsbuf->f_fsid.__val[0]; +#ifdef _STATVFSBUF_F_UNUSED + buf->__f_unused = 0; #endif + buf->f_namemax = fsbuf->f_namelen; + memset (buf->__f_spare, '\0', sizeof (buf->__f_spare)); + + /* What remains to do is to fill the fields f_favail and f_flag. */ + + /* XXX I have no idea how to compute f_favail. Any idea??? */ + buf->f_favail = buf->f_ffree; + buf->f_flag = fsbuf->f_flags ^ ST_VALID; +} +#endif void -INTERNAL_STATVFS (const char *name, struct STATVFS *buf, - struct STATFS *fsbuf, int fd) +__internal_statvfs64 (struct statvfs64 *buf, const struct statfs64 *fsbuf) { /* Now fill in the fields we have information for. */ buf->f_bsize = fsbuf->f_bsize; diff --git a/sysdeps/unix/sysv/linux/internal_statvfs.h b/sysdeps/unix/sysv/linux/internal_statvfs.h index 9ac675c2e8..a8e9aec2c8 100644 --- a/sysdeps/unix/sysv/linux/internal_statvfs.h +++ b/sysdeps/unix/sysv/linux/internal_statvfs.h @@ -18,9 +18,9 @@ #include -extern void __internal_statvfs (const char *name, struct statvfs *buf, - struct statfs *fsbuf, int fd) +extern void __internal_statvfs (struct statvfs *buf, + const struct statfs *fsbuf) attribute_hidden; -extern void __internal_statvfs64 (const char *name, struct statvfs64 *buf, - struct statfs64 *fsbuf, int fd) +extern void __internal_statvfs64 (struct statvfs64 *buf, + const struct statfs64 *fsbuf) attribute_hidden; diff --git a/sysdeps/unix/sysv/linux/internal_statvfs64.c b/sysdeps/unix/sysv/linux/internal_statvfs64.c deleted file mode 100644 index 49e7689f8b..0000000000 --- a/sysdeps/unix/sysv/linux/internal_statvfs64.c +++ /dev/null @@ -1,4 +0,0 @@ -#define STATFS statfs64 -#define STATVFS statvfs64 -#define INTERNAL_STATVFS __internal_statvfs64 -#include "internal_statvfs.c" diff --git a/sysdeps/unix/sysv/linux/statvfs.c b/sysdeps/unix/sysv/linux/statvfs.c index f165899711..210242b9a0 100644 --- a/sysdeps/unix/sysv/linux/statvfs.c +++ b/sysdeps/unix/sysv/linux/statvfs.c @@ -33,7 +33,7 @@ __statvfs (const char *file, struct statvfs *buf) return -1; /* Convert the result. */ - __internal_statvfs (file, buf, &fsbuf, -1); + __internal_statvfs (buf, &fsbuf); /* We signal success if the statfs call succeeded. */ return 0; diff --git a/sysdeps/unix/sysv/linux/statvfs64.c b/sysdeps/unix/sysv/linux/statvfs64.c index 3d29908afa..3f03b7edb8 100644 --- a/sysdeps/unix/sysv/linux/statvfs64.c +++ b/sysdeps/unix/sysv/linux/statvfs64.c @@ -33,7 +33,7 @@ __statvfs64 (const char *file, struct statvfs64 *buf) return -1; /* Convert the result. */ - __internal_statvfs64 (file, buf, &fsbuf, -1); + __internal_statvfs64 (buf, &fsbuf); return 0; }