From: David Howells <dhowells@redhat.com>
To: arnd@arndb.de
Cc: linux-afs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-cifs@vger.kernel.org, samba-technical@lists.samba.org,
linux-kernel@vger.kernel.org, dhowells@redhat.com,
linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org
Subject: [PATCH 09/12] fsinfo: Ext4: Return information through the filesystem info syscall
Date: Fri, 20 Nov 2015 14:56:13 +0000 [thread overview]
Message-ID: <20151120145613.18930.78846.stgit@warthog.procyon.org.uk> (raw)
In-Reply-To: <20151120145422.18930.72662.stgit@warthog.procyon.org.uk>
Return Ext4 filesystem information through the filesystem info retrieval
system call. This includes the following:
(1) information about the capacity and resolution of the inode timestamps;
(2) the volume label as the volume name, setting FSINFO_VOLUME_NAME;
(3) the remote FSID as the volume ID, setting FSINFO_VOLUME_ID;
(4) the statfs information;
(5) a list of supported IOC flags.
Example output:
[root@andromeda ~]# ./test-fsinfo /var/cache/fscache/
fsinfo(/var/cache/fscache/) = 0
mask : 9f
dev : 08:06
fs : type=ef53 name=ext4
ioc : 4bdfff
nameln: 255
flags : 1020
times : range=ffffffff80000000-37fffffff
atime : gran=1e-09s
btime : gran=1e-09s
ctime : gran=1e-09s
mtime : gran=1e-09s
blocks: n=1123529 fr=208887 av=146054
files : n=293760 fr=225334 av=225334
bsize : 4096
frsize: 4096
fsid : 48bc815f32464608
volume: 'fred'
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/ext4/super.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index a63c7b0a10cf..fbd1cad4ff3b 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -73,6 +73,8 @@ static void ext4_clear_journal_err(struct super_block *sb,
static int ext4_sync_fs(struct super_block *sb, int wait);
static int ext4_remount(struct super_block *sb, int *flags, char *data);
static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf);
+static int ext4_get_fsinfo(struct dentry *dentry, struct fsinfo *f,
+ unsigned flags);
static int ext4_unfreeze(struct super_block *sb);
static int ext4_freeze(struct super_block *sb);
static struct dentry *ext4_mount(struct file_system_type *fs_type, int flags,
@@ -1122,6 +1124,7 @@ static const struct super_operations ext4_sops = {
.freeze_fs = ext4_freeze,
.unfreeze_fs = ext4_unfreeze,
.statfs = ext4_statfs,
+ .get_fsinfo = ext4_get_fsinfo,
.remount_fs = ext4_remount,
.show_options = ext4_show_options,
#ifdef CONFIG_QUOTA
@@ -3524,6 +3527,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
if (sb->s_magic != EXT4_SUPER_MAGIC)
goto cantfind_ext4;
sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written);
+ memcpy(sb->s_uuid, es->s_uuid, sizeof(sb->s_uuid));
/* Warn if metadata_csum and gdt_csum are both set. */
if (EXT4_HAS_RO_COMPAT_FEATURE(sb,
@@ -5179,6 +5183,41 @@ static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
return 0;
}
+/*
+ * Read filesystem information.
+ */
+static int ext4_get_fsinfo(struct dentry *dentry, struct fsinfo *f,
+ unsigned flags)
+{
+ struct super_block *sb = dentry->d_sb;
+ struct ext4_sb_info *sbi = EXT4_SB(sb);
+ struct ext4_super_block *es = sbi->s_es;
+ struct inode *inode = d_inode(dentry);
+ struct ext4_inode *raw_inode;
+ struct ext4_inode_info *ei = EXT4_I(inode);
+
+ strcpy(f->f_volume_name, es->s_volume_name);
+
+ f->f_mask = FSINFO_FSID | FSINFO_VOLUME_NAME;
+ f->f_supported_ioc_flags = EXT4_FL_USER_VISIBLE;
+
+ f->f_min_time = S32_MIN;
+ f->f_max_time = S32_MAX;
+
+ if (EXT4_FITS_IN_INODE(raw_inode, ei, i_ctime_extra))
+ f->f_ctime_gran_exponent = -9;
+ if (EXT4_FITS_IN_INODE(raw_inode, ei, i_mtime_extra))
+ f->f_mtime_gran_exponent = -9;
+ if (EXT4_FITS_IN_INODE(raw_inode, ei, i_atime_extra)) {
+ f->f_atime_gran_exponent = -9;
+ f->f_max_time += ((1 << EXT4_EPOCH_BITS) - 1) * 0x100000000LL;
+ }
+ if (EXT4_FITS_IN_INODE(raw_inode, ei, i_crtime_extra))
+ f->f_btime_gran_exponent = -9;
+
+ return vfs_get_fsinfo_from_statfs(dentry, f, flags);
+}
+
/* Helper function for writing quotas on sync - we need to start transaction
* before quota file is locked for write. Otherwise the are possible deadlocks:
* Process 1 Process 2
next prev parent reply other threads:[~2015-11-20 14:56 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-20 14:54 [RFC][PATCH 00/12] Enhanced file stat system call David Howells
2015-11-20 14:54 ` [PATCH 01/12] Ext4: Fix extended timestamp encoding and decoding David Howells
[not found] ` <20151120145434.18930.89755.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2015-11-24 17:37 ` Andreas Dilger
2015-11-24 17:37 ` Andreas Dilger
2015-11-24 19:36 ` Theodore Ts'o
[not found] ` <20151124193646.GA3482-AKGzg7BKzIDYtjvyW6yDsg@public.gmane.org>
2015-11-24 20:10 ` Arnd Bergmann
2015-11-24 20:10 ` Arnd Bergmann
2015-11-29 2:45 ` Theodore Ts'o
2015-11-29 2:45 ` Theodore Ts'o
[not found] ` <20151129024555.GA31968-AKGzg7BKzIDYtjvyW6yDsg@public.gmane.org>
2015-11-29 21:30 ` Arnd Bergmann
2015-11-29 21:30 ` Arnd Bergmann
2015-11-30 14:16 ` Theodore Ts'o
[not found] ` <20151130141605.GA4316-AKGzg7BKzIDYtjvyW6yDsg@public.gmane.org>
2015-11-30 14:37 ` Arnd Bergmann
2015-11-30 14:37 ` Arnd Bergmann
2015-11-30 14:46 ` Elmar Stellnberger
2015-11-26 15:28 ` David Howells
2015-11-26 15:28 ` David Howells
2015-11-20 14:54 ` [PATCH 02/12] statx: Provide IOC flags for Windows fs attributes David Howells
[not found] ` <20151120145447.18930.5308.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2015-11-24 19:52 ` Theodore Ts'o
2015-11-24 19:52 ` Theodore Ts'o
2015-11-26 15:35 ` David Howells
[not found] ` <7976.1448552129-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2015-11-26 16:01 ` David Howells
2015-11-26 16:01 ` David Howells
2015-11-26 22:10 ` Andreas Dilger
2015-11-26 22:10 ` Andreas Dilger
2015-11-20 14:54 ` [PATCH 03/12] statx: Add a system call to make enhanced file info available David Howells
[not found] ` <20151120145457.18930.79678.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2015-11-24 20:21 ` Dave Chinner
2015-11-24 20:21 ` Dave Chinner
2015-12-04 12:06 ` Pavel Machek
2015-12-04 12:06 ` Pavel Machek
2015-12-21 23:21 ` David Howells
2015-11-20 14:55 ` [PATCH 04/12] statx: AFS: Return enhanced file attributes David Howells
2015-11-20 14:55 ` [PATCH 05/12] statx: Ext4: " David Howells
2015-11-20 14:55 ` [PATCH 06/12] statx: NFS: " David Howells
2015-11-20 14:55 ` [PATCH 07/12] statx: CIFS: Return enhanced attributes David Howells
2015-11-24 17:33 ` Steve French
2015-11-24 17:34 ` Steve French
2015-11-24 17:34 ` Steve French
2015-11-20 14:56 ` [PATCH 08/12] fsinfo: Add a system call to make enhanced filesystem info available David Howells
2015-11-20 14:56 ` David Howells [this message]
2015-11-20 14:56 ` [PATCH 10/12] fsinfo: AFS: Return information through the filesystem info syscall David Howells
2015-11-20 14:56 ` [PATCH 11/12] fsinfo: NFS: " David Howells
[not found] ` <20151120145422.18930.72662.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2015-11-20 14:56 ` [PATCH 12/12] fsinfo: CIFS: " David Howells
2015-11-20 14:56 ` David Howells
2015-11-24 8:11 ` [RFC][PATCH 00/12] Enhanced file stat system call Christoph Hellwig
2015-11-24 8:11 ` Christoph Hellwig
2015-11-20 16:19 ` Martin Steigerwald
2015-11-24 8:13 ` Christoph Hellwig
2015-11-24 8:48 ` Martin Steigerwald
2015-11-24 8:50 ` Christoph Hellwig
2015-11-20 16:28 ` David Howells
2015-11-20 16:28 ` David Howells
2015-11-20 16:35 ` Martin Steigerwald
[not found] ` <4495.1448036915-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2015-11-25 17:51 ` J. Bruce Fields
2015-11-25 17:51 ` J. Bruce Fields
[not found] ` <20151125175153.GA30335-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
2015-11-25 19:30 ` Andreas Dilger
2015-11-25 19:30 ` Andreas Dilger
2015-11-20 16:50 ` Casey Schaufler
[not found] ` <564F4F4E.8060603-iSGtlc1asvQWG2LlvL+J4A@public.gmane.org>
2015-11-24 8:15 ` Christoph Hellwig
2015-11-24 8:15 ` Christoph Hellwig
2015-11-24 14:43 ` Casey Schaufler
2015-11-24 16:28 ` Andreas Dilger
2015-11-26 15:19 ` David Howells
2015-11-26 22:06 ` Andreas Dilger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151120145613.18930.78846.stgit@warthog.procyon.org.uk \
--to=dhowells@redhat.com \
--cc=arnd@arndb.de \
--cc=linux-afs@vger.kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=samba-technical@lists.samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.