From patchwork Fri Apr 3 14:04:52 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 2112 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1775225205; bh=X3aSiOJiN+kHBTfXb5/P0MEKDFOMKMlcywD1VBvKKzE=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=s2uN6d2KQvNr2OrwW1BosCCfDfNhZqpcByKu8RyAOyi01fZsaSCVfYlkJhJ1yTJjZ oWTJarsUk5zNh6q8SFibMEso+coCVoYWpKEwxcUSNVE1hH+Dm3EJYvbxZfIFOPdTVC vEyulgXtH5Rmk0KKy/Sj1FbnSwh4LqHpwTkQhF6ESufVoyXkc7pol/pC9SkIqxPlvL 1gc3K8fbvkTHP8mcmF6rq21qQHHN/sbgUi7YLMQDhCX5EJx7d94RV+5qIAu81NGCDL 9sNNUxCExaisU2p7FsI5FwH8TfCl9R3rEb1WhVxfaz0cuzoplJ+n7rBZ1o5Nw/VHac izxXM7586detg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id A8D5A6A376 for ; Fri, 3 Apr 2026 08:06:45 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id Ip0ewIZHyTQg for ; Fri, 3 Apr 2026 08:06:45 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1775225205; bh=X3aSiOJiN+kHBTfXb5/P0MEKDFOMKMlcywD1VBvKKzE=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=s2uN6d2KQvNr2OrwW1BosCCfDfNhZqpcByKu8RyAOyi01fZsaSCVfYlkJhJ1yTJjZ oWTJarsUk5zNh6q8SFibMEso+coCVoYWpKEwxcUSNVE1hH+Dm3EJYvbxZfIFOPdTVC vEyulgXtH5Rmk0KKy/Sj1FbnSwh4LqHpwTkQhF6ESufVoyXkc7pol/pC9SkIqxPlvL 1gc3K8fbvkTHP8mcmF6rq21qQHHN/sbgUi7YLMQDhCX5EJx7d94RV+5qIAu81NGCDL 9sNNUxCExaisU2p7FsI5FwH8TfCl9R3rEb1WhVxfaz0cuzoplJ+n7rBZ1o5Nw/VHac izxXM7586detg== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 2758A6A34F for ; Fri, 3 Apr 2026 08:06:45 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1775225200; bh=CGmUioSTsZSlVdJB0VcGtXtUu6wk/IWXi8v+mwsmkIQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ACnSx+SOFH90h7D1HNVmefBYYpVuOUDUfzYoP34kjhX1nPuPPZFlpuWjW6liA85gy IughaawuV3BrbfZSUq+ddCNQomTtQA5yx8hkdgqbviZI3jPUAePf7jlm3SgtZ0DNAp /GSKL++2kOuYqAZ3TWE2MNXJIHdwZTfxOAmN7q42WK/1QxIspUxNm0c4DlS/ha1Ytb XkTCIbEvx8RzKm2X6svu5DjT2bXhtPM7DJQQPDLa62bsBvtfBWPcsjbOPbuC1v9z7W c8k97mtfADUkBPpQc4tWZVshJXyvypSbg01WRlMANBhhNF2zep4WmjHuuxhX/K6HYh HPzdp1cGPI3KA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id B05596A34E; Fri, 3 Apr 2026 08:06:40 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id N8mPsxxL-iWk; Fri, 3 Apr 2026 08:06:40 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1775225199; bh=+J/WIHFfy1N2iWJVnhG8R2Y1n/bvSsGv1c85qGp9Hks=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eve0oQNFXBHYeVxfhTvcasOU6Jw0ftav90IY2hXGZMhwYiyVhMxF6hjj6Gnw9mZhp h/c/bDNJIG9EAPG7yjBHHC3Kewbip8g6qxgyxIcC5z7VQTp/8J+DymO72YCXT2gQIQ 9J3gSqefVCnkdU/ifunV5pze932lKuytpvJuJcPC9KeB1859HYobIwZ9IWdLLD74pq WWaCpkwu9VKUcdAWjgsI1VFePx4K8v07b1/02dfaPQF0oWT9fe9FhfV5Z1s8agsy7+ ig7wpwLpwKgXIHnRkjmR4cS49irerY1EfndQQqCFENIb/NuS6HEC54cB0gpw29LYU9 uyoxw8Yv5MfpA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 8B85A6A350; Fri, 3 Apr 2026 08:06:39 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Fri, 3 Apr 2026 08:04:52 -0600 Message-ID: <20260403140523.1998228-31-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260403140523.1998228-1-sjg@u-boot.org> References: <20260403140523.1998228-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: TEPZ6R4EBPRKNKJQ6W5BYK6K5JFVYFU4 X-Message-ID-Hash: TEPZ6R4EBPRKNKJQ6W5BYK6K5JFVYFU4 X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Simon Glass X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 30/34] fat: Add fat_statfs() to report filesystem statistics List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass Add fat_statfs() which reads the FAT metadata and scans the FAT table to count free clusters, filling in block size, total blocks and free blocks. This is used by the FAT VFS driver's statfs operation. Signed-off-by: Simon Glass --- fs/fat/fat.c | 27 +++++++++++++++++++++++++++ include/fat.h | 8 ++++++++ 2 files changed, 35 insertions(+) diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 42bc7bffb0f..53f610ff2f3 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -697,6 +697,33 @@ static int get_fs_info(struct fsdata *mydata) return 0; } +int fat_statfs(struct fs_statfs *stats) +{ + struct fsdata fsdata; + u32 total_clust, free_clust, entry; + int ret; + + ret = get_fs_info(&fsdata); + if (ret) + return ret; + + total_clust = (fsdata.total_sect - fsdata.data_begin) / + fsdata.clust_size; + free_clust = 0; + for (entry = 2; entry < total_clust + 2; entry++) { + if (!get_fatent(&fsdata, entry)) + free_clust++; + } + + stats->bsize = fsdata.clust_size * fsdata.sect_size; + stats->blocks = total_clust; + stats->bfree = free_clust; + + free(fsdata.fatbuf); + + return 0; +} + int fat_itr_root(struct fat_itr *itr, struct fsdata *fsdata) { if (get_fs_info(fsdata)) diff --git a/include/fat.h b/include/fat.h index d08cd5d1c47..e6370c3afb0 100644 --- a/include/fat.h +++ b/include/fat.h @@ -413,6 +413,14 @@ int fat_rename(const char *old_path, const char *new_path); */ int fat_mkdir(const char *dirname); +/** + * fat_statfs() - get filesystem statistics + * + * @stats: pointer to struct fs_statfs to fill + * Return: 0 on success, -ve on error + */ +int fat_statfs(struct fs_statfs *stats); + /** * fat_close() - close FAT filesystem and release resources */