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 11/12] fsinfo: NFS: Return information through the filesystem info syscall
Date: Fri, 20 Nov 2015 14:56:39 +0000 [thread overview]
Message-ID: <20151120145639.18930.13368.stgit@warthog.procyon.org.uk> (raw)
In-Reply-To: <20151120145422.18930.72662.stgit@warthog.procyon.org.uk>
Return NFS 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 client hostname as the domain name, setting FSINFO_DOMAIN_NAME;
(3) the remote FSID as the volume ID, setting FSINFO_VOLUME_ID;
and unless AT_NO_ATTR_SYNC is specified:
(4) the statfs information retrieved from the server.
Note that the NFS FSID value is *not* returned as the local FSID since the
FSID value is a local handle used by NFSD; see the volume ID field instead.
Example output:
[root@andromeda ~]# ./test-fsinfo /warthog/
fsinfo(/warthog/) = 0
mask : 12f
dev : 00:27
fs : type=6969 name=nfs4
ioc : 0
nameln: 255
flags : 1020
times : range=8000000000000000-7fffffffffffffff
atime : gran=1e-09s
btime : gran=1e-09s
ctime : gran=1e-09s
mtime : gran=1e-09s
blocks: n=503841 fr=48261 av=22645
files : n=32776192 fr=18903243 av=18903243
bsize : 1048576
frsize: 0
volid : 8c494c34 de5688ac 2e61e05d 5f144b8e
domain: 'warthog'
Note that NFS4 potentially provides a separate value for f_favail that could
be provided through this interface.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/nfs/internal.h | 1 +
fs/nfs/nfs4super.c | 1 +
fs/nfs/super.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 60 insertions(+)
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
index 56cfde26fb9c..6c7bb9c9e5c6 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -442,6 +442,7 @@ extern void nfs_pageio_reset_read_mds(struct nfs_pageio_descriptor *pgio);
void nfs_clone_super(struct super_block *, struct nfs_mount_info *);
void nfs_umount_begin(struct super_block *);
int nfs_statfs(struct dentry *, struct kstatfs *);
+int nfs_get_fsinfo(struct dentry *, struct fsinfo *, unsigned);
int nfs_show_options(struct seq_file *, struct dentry *);
int nfs_show_devname(struct seq_file *, struct dentry *);
int nfs_show_path(struct seq_file *, struct dentry *);
diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c
index 6fb7cb6b3f4b..1c15c5884ac4 100644
--- a/fs/nfs/nfs4super.c
+++ b/fs/nfs/nfs4super.c
@@ -54,6 +54,7 @@ static const struct super_operations nfs4_sops = {
.write_inode = nfs4_write_inode,
.drop_inode = nfs_drop_inode,
.statfs = nfs_statfs,
+ .get_fsinfo = nfs_get_fsinfo,
.evict_inode = nfs4_evict_inode,
.umount_begin = nfs_umount_begin,
.show_options = nfs_show_options,
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 383a027de452..bbd33b121b48 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -311,6 +311,7 @@ const struct super_operations nfs_sops = {
.write_inode = nfs_write_inode,
.drop_inode = nfs_drop_inode,
.statfs = nfs_statfs,
+ .get_fsinfo = nfs_get_fsinfo,
.evict_inode = nfs_evict_inode,
.umount_begin = nfs_umount_begin,
.show_options = nfs_show_options,
@@ -494,6 +495,63 @@ int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
EXPORT_SYMBOL_GPL(nfs_statfs);
/*
+ * Read filesystem information.
+ */
+int nfs_get_fsinfo(struct dentry *dentry, struct fsinfo *f, unsigned flags)
+{
+ struct nfs_server *server = NFS_SB(dentry->d_sb);
+ struct nfs_client *client = server->nfs_client;
+ int ret;
+
+ f->f_bsize = dentry->d_sb->s_blocksize;
+ f->f_namelen = server->namelen;
+
+ if (client->rpc_ops->version < 4) {
+ f->f_min_time = 0;
+ f->f_max_time = U32_MAX;
+ } else {
+ f->f_min_time = S64_MIN;
+ f->f_max_time = S64_MAX;
+ }
+
+ f->f_atime_gran_exponent = -6;
+ f->f_ctime_gran_exponent = -6;
+ f->f_mtime_gran_exponent = -6;
+ if (client->rpc_ops->version >= 3) {
+ f->f_atime_gran_exponent = -9;
+ f->f_ctime_gran_exponent = -9;
+ f->f_mtime_gran_exponent = -9;
+ }
+
+ if (client->cl_hostname) {
+ strncpy(f->f_domain_name, client->cl_hostname,
+ sizeof(f->f_domain_name));
+ f->f_domain_name[sizeof(f->f_domain_name) - 1] = 0;
+ f->f_mask |= FSINFO_DOMAIN_NAME;
+ }
+
+ /* Treat the remote FSID as the volume ID since we don't support
+ * reexportation through NFSD.
+ */
+ memcpy(f->f_volume_id, &server->fsid,
+ min(sizeof(f->f_volume_id), sizeof(server->fsid)));
+ f->f_mask |= FSINFO_VOLUME_ID;
+
+ if (flags & AT_NO_ATTR_SYNC)
+ return 0;
+
+ ret = vfs_get_fsinfo_from_statfs(dentry, f, flags);
+ if (ret < 0)
+ return ret;
+
+ /* Don't pass the FSID to userspace since this isn't exportable */
+ memset(&f->f_fsid, 0, sizeof(f->f_fsid));
+ f->f_mask &= ~FSINFO_FSID;
+ return 0;
+}
+EXPORT_SYMBOL_GPL(nfs_get_fsinfo);
+
+/*
* Map the security flavour number to a name
*/
static const char *nfs_pseudoflavour_to_name(rpc_authflavor_t flavour)
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 ` [PATCH 09/12] fsinfo: Ext4: Return information through the filesystem info syscall David Howells
2015-11-20 14:56 ` [PATCH 10/12] fsinfo: AFS: " David Howells
2015-11-20 14:56 ` David Howells [this message]
[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=20151120145639.18930.13368.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.