From: Eric Sandeen <sandeen@sandeen.net>
To: linux-xfs <linux-xfs@vger.kernel.org>,
fsdevel <linux-fsdevel@vger.kernel.org>,
David Howells <dhowells@redhat.com>
Subject: [PATCH 1/3] xfs_io: move stat functions to new file
Date: Thu, 6 Apr 2017 13:46:23 -0500 [thread overview]
Message-ID: <1db22b7b-b017-2584-49d8-bd875b2e1ae3@sandeen.net> (raw)
In-Reply-To: <4bb89f72-962d-a9a2-c224-daa828558444@sandeen.net>
Adding statx will add a bit of code, so break stat-related
functions out of open.c into their own new file.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
V3: remember to call stat_init()!
diff --git a/io/Makefile b/io/Makefile
index 32df568..435ccff 100644
--- a/io/Makefile
+++ b/io/Makefile
@@ -11,7 +11,7 @@ HFILES = init.h io.h
CFILES = init.c \
attr.c bmap.c cowextsize.c encrypt.c file.c freeze.c fsync.c \
getrusage.c imap.c link.c mmap.c open.c parent.c pread.c prealloc.c \
- pwrite.c reflink.c seek.c shutdown.c sync.c truncate.c utimes.c
+ pwrite.c reflink.c seek.c shutdown.c stat.c sync.c truncate.c utimes.c
LLDLIBS = $(LIBXCMD) $(LIBHANDLE) $(LIBPTHREAD)
LTDEPENDENCIES = $(LIBXCMD) $(LIBHANDLE)
diff --git a/io/init.c b/io/init.c
index 06002e6..c15a1e1 100644
--- a/io/init.c
+++ b/io/init.c
@@ -86,6 +86,7 @@ init_commands(void)
seek_init();
sendfile_init();
shutdown_init();
+ stat_init();
sync_init();
sync_range_init();
truncate_init();
diff --git a/io/io.h b/io/io.h
index c40aad0..952bdb8 100644
--- a/io/io.h
+++ b/io/io.h
@@ -53,7 +53,7 @@ extern fileio_t *filetable; /* open file table */
extern int filecount; /* number of open files */
extern fileio_t *file; /* active file in file table */
extern int filelist_f(void);
-
+extern int stat_f(int argc, char **argv);
/*
* Memory mapped file regions
*/
@@ -112,6 +112,7 @@ extern void pwrite_init(void);
extern void quit_init(void);
extern void seek_init(void);
extern void shutdown_init(void);
+extern void stat_init(void);
extern void sync_init(void);
extern void truncate_init(void);
extern void utimes_init(void);
diff --git a/io/open.c b/io/open.c
index 941fdc1..2ed55cf 100644
--- a/io/open.c
+++ b/io/open.c
@@ -39,9 +39,7 @@
#endif
static cmdinfo_t open_cmd;
-static cmdinfo_t stat_cmd;
static cmdinfo_t close_cmd;
-static cmdinfo_t statfs_cmd;
static cmdinfo_t chproj_cmd;
static cmdinfo_t lsproj_cmd;
static cmdinfo_t extsize_cmd;
@@ -49,96 +47,6 @@ static cmdinfo_t inode_cmd;
static prid_t prid;
static long extsize;
-off64_t
-filesize(void)
-{
- struct stat st;
-
- if (fstat(file->fd, &st) < 0) {
- perror("fstat");
- return -1;
- }
- return st.st_size;
-}
-
-static char *
-filetype(mode_t mode)
-{
- switch (mode & S_IFMT) {
- case S_IFSOCK:
- return _("socket");
- case S_IFDIR:
- return _("directory");
- case S_IFCHR:
- return _("char device");
- case S_IFBLK:
- return _("block device");
- case S_IFREG:
- return _("regular file");
- case S_IFLNK:
- return _("symbolic link");
- case S_IFIFO:
- return _("fifo");
- }
- return NULL;
-}
-
-static int
-stat_f(
- int argc,
- char **argv)
-{
- struct dioattr dio;
- struct fsxattr fsx, fsxa;
- struct stat st;
- int verbose = (argc == 2 && !strcmp(argv[1], "-v"));
-
- printf(_("fd.path = \"%s\"\n"), file->name);
- printf(_("fd.flags = %s,%s,%s%s%s%s%s\n"),
- file->flags & IO_OSYNC ? _("sync") : _("non-sync"),
- file->flags & IO_DIRECT ? _("direct") : _("non-direct"),
- file->flags & IO_READONLY ? _("read-only") : _("read-write"),
- file->flags & IO_REALTIME ? _(",real-time") : "",
- file->flags & IO_APPEND ? _(",append-only") : "",
- file->flags & IO_NONBLOCK ? _(",non-block") : "",
- file->flags & IO_TMPFILE ? _(",tmpfile") : "");
- if (fstat(file->fd, &st) < 0) {
- perror("fstat");
- } else {
- printf(_("stat.ino = %lld\n"), (long long)st.st_ino);
- printf(_("stat.type = %s\n"), filetype(st.st_mode));
- printf(_("stat.size = %lld\n"), (long long)st.st_size);
- printf(_("stat.blocks = %lld\n"), (long long)st.st_blocks);
- if (verbose) {
- printf(_("stat.atime = %s"), ctime(&st.st_atime));
- printf(_("stat.mtime = %s"), ctime(&st.st_mtime));
- printf(_("stat.ctime = %s"), ctime(&st.st_ctime));
- }
- }
- if (file->flags & IO_FOREIGN)
- return 0;
- if ((xfsctl(file->name, file->fd, FS_IOC_FSGETXATTR, &fsx)) < 0 ||
- (xfsctl(file->name, file->fd, XFS_IOC_FSGETXATTRA, &fsxa)) < 0) {
- perror("FS_IOC_FSGETXATTR");
- } else {
- printf(_("fsxattr.xflags = 0x%x "), fsx.fsx_xflags);
- printxattr(fsx.fsx_xflags, verbose, 0, file->name, 1, 1);
- printf(_("fsxattr.projid = %u\n"), fsx.fsx_projid);
- printf(_("fsxattr.extsize = %u\n"), fsx.fsx_extsize);
- printf(_("fsxattr.cowextsize = %u\n"), fsx.fsx_cowextsize);
- printf(_("fsxattr.nextents = %u\n"), fsx.fsx_nextents);
- printf(_("fsxattr.naextents = %u\n"), fsxa.fsx_nextents);
- }
- if ((xfsctl(file->name, file->fd, XFS_IOC_DIOINFO, &dio)) < 0) {
- perror("XFS_IOC_DIOINFO");
- } else {
- printf(_("dioattr.mem = 0x%x\n"), dio.d_mem);
- printf(_("dioattr.miniosz = %u\n"), dio.d_miniosz);
- printf(_("dioattr.maxiosz = %u\n"), dio.d_maxiosz);
- }
- return 0;
-}
-
int
openfile(
char *path,
@@ -697,58 +605,6 @@ extsize_f(
return 0;
}
-static int
-statfs_f(
- int argc,
- char **argv)
-{
- struct xfs_fsop_counts fscounts;
- struct xfs_fsop_geom fsgeo;
- struct statfs st;
-
- printf(_("fd.path = \"%s\"\n"), file->name);
- if (platform_fstatfs(file->fd, &st) < 0) {
- perror("fstatfs");
- } else {
- printf(_("statfs.f_bsize = %lld\n"), (long long) st.f_bsize);
- printf(_("statfs.f_blocks = %lld\n"), (long long) st.f_blocks);
- printf(_("statfs.f_bavail = %lld\n"), (long long) st.f_bavail);
- printf(_("statfs.f_files = %lld\n"), (long long) st.f_files);
- printf(_("statfs.f_ffree = %lld\n"), (long long) st.f_ffree);
- }
- if (file->flags & IO_FOREIGN)
- return 0;
- if ((xfsctl(file->name, file->fd, XFS_IOC_FSGEOMETRY_V1, &fsgeo)) < 0) {
- perror("XFS_IOC_FSGEOMETRY_V1");
- } else {
- printf(_("geom.bsize = %u\n"), fsgeo.blocksize);
- printf(_("geom.agcount = %u\n"), fsgeo.agcount);
- printf(_("geom.agblocks = %u\n"), fsgeo.agblocks);
- printf(_("geom.datablocks = %llu\n"),
- (unsigned long long) fsgeo.datablocks);
- printf(_("geom.rtblocks = %llu\n"),
- (unsigned long long) fsgeo.rtblocks);
- printf(_("geom.rtextents = %llu\n"),
- (unsigned long long) fsgeo.rtextents);
- printf(_("geom.rtextsize = %u\n"), fsgeo.rtextsize);
- printf(_("geom.sunit = %u\n"), fsgeo.sunit);
- printf(_("geom.swidth = %u\n"), fsgeo.swidth);
- }
- if ((xfsctl(file->name, file->fd, XFS_IOC_FSCOUNTS, &fscounts)) < 0) {
- perror("XFS_IOC_FSCOUNTS");
- } else {
- printf(_("counts.freedata = %llu\n"),
- (unsigned long long) fscounts.freedata);
- printf(_("counts.freertx = %llu\n"),
- (unsigned long long) fscounts.freertx);
- printf(_("counts.freeino = %llu\n"),
- (unsigned long long) fscounts.freeino);
- printf(_("counts.allocino = %llu\n"),
- (unsigned long long) fscounts.allocino);
- }
- return 0;
-}
-
static void
inode_help(void)
{
@@ -920,14 +776,6 @@ open_init(void)
open_cmd.oneline = _("open the file specified by path");
open_cmd.help = open_help;
- stat_cmd.name = "stat";
- stat_cmd.cfunc = stat_f;
- stat_cmd.argmin = 0;
- stat_cmd.argmax = 1;
- stat_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
- stat_cmd.args = _("[-v]");
- stat_cmd.oneline = _("statistics on the currently open file");
-
close_cmd.name = "close";
close_cmd.altname = "c";
close_cmd.cfunc = close_f;
@@ -936,12 +784,6 @@ open_init(void)
close_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
close_cmd.oneline = _("close the current open file");
- statfs_cmd.name = "statfs";
- statfs_cmd.cfunc = statfs_f;
- statfs_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
- statfs_cmd.oneline =
- _("statistics on the filesystem of the currently open file");
-
chproj_cmd.name = "chproj";
chproj_cmd.cfunc = chproj_f;
chproj_cmd.args = _("[-D | -R] projid");
@@ -983,9 +825,7 @@ open_init(void)
inode_cmd.help = inode_help;
add_command(&open_cmd);
- add_command(&stat_cmd);
add_command(&close_cmd);
- add_command(&statfs_cmd);
add_command(&chproj_cmd);
add_command(&lsproj_cmd);
add_command(&extsize_cmd);
diff --git a/io/stat.c b/io/stat.c
new file mode 100644
index 0000000..3ae9903
--- /dev/null
+++ b/io/stat.c
@@ -0,0 +1,189 @@
+/*
+ * Copyright (c) 2003-2005 Silicon Graphics, Inc.
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "command.h"
+#include "input.h"
+#include "init.h"
+#include "io.h"
+#include "libxfs.h"
+
+static cmdinfo_t stat_cmd;
+static cmdinfo_t statfs_cmd;
+
+off64_t
+filesize(void)
+{
+ struct stat st;
+
+ if (fstat(file->fd, &st) < 0) {
+ perror("fstat");
+ return -1;
+ }
+ return st.st_size;
+}
+
+static char *
+filetype(mode_t mode)
+{
+ switch (mode & S_IFMT) {
+ case S_IFSOCK:
+ return _("socket");
+ case S_IFDIR:
+ return _("directory");
+ case S_IFCHR:
+ return _("char device");
+ case S_IFBLK:
+ return _("block device");
+ case S_IFREG:
+ return _("regular file");
+ case S_IFLNK:
+ return _("symbolic link");
+ case S_IFIFO:
+ return _("fifo");
+ }
+ return NULL;
+}
+
+int
+stat_f(
+ int argc,
+ char **argv)
+{
+ struct dioattr dio;
+ struct fsxattr fsx, fsxa;
+ struct stat st;
+ int verbose = (argc == 2 && !strcmp(argv[1], "-v"));
+
+ printf(_("fd.path = \"%s\"\n"), file->name);
+ printf(_("fd.flags = %s,%s,%s%s%s%s%s\n"),
+ file->flags & IO_OSYNC ? _("sync") : _("non-sync"),
+ file->flags & IO_DIRECT ? _("direct") : _("non-direct"),
+ file->flags & IO_READONLY ? _("read-only") : _("read-write"),
+ file->flags & IO_REALTIME ? _(",real-time") : "",
+ file->flags & IO_APPEND ? _(",append-only") : "",
+ file->flags & IO_NONBLOCK ? _(",non-block") : "",
+ file->flags & IO_TMPFILE ? _(",tmpfile") : "");
+ if (fstat(file->fd, &st) < 0) {
+ perror("fstat");
+ } else {
+ printf(_("stat.ino = %lld\n"), (long long)st.st_ino);
+ printf(_("stat.type = %s\n"), filetype(st.st_mode));
+ printf(_("stat.size = %lld\n"), (long long)st.st_size);
+ printf(_("stat.blocks = %lld\n"), (long long)st.st_blocks);
+ if (verbose) {
+ printf(_("stat.atime = %s"), ctime(&st.st_atime));
+ printf(_("stat.mtime = %s"), ctime(&st.st_mtime));
+ printf(_("stat.ctime = %s"), ctime(&st.st_ctime));
+ }
+ }
+ if (file->flags & IO_FOREIGN)
+ return 0;
+ if ((xfsctl(file->name, file->fd, FS_IOC_FSGETXATTR, &fsx)) < 0 ||
+ (xfsctl(file->name, file->fd, XFS_IOC_FSGETXATTRA, &fsxa)) < 0) {
+ perror("FS_IOC_FSGETXATTR");
+ } else {
+ printf(_("fsxattr.xflags = 0x%x "), fsx.fsx_xflags);
+ printxattr(fsx.fsx_xflags, verbose, 0, file->name, 1, 1);
+ printf(_("fsxattr.projid = %u\n"), fsx.fsx_projid);
+ printf(_("fsxattr.extsize = %u\n"), fsx.fsx_extsize);
+ printf(_("fsxattr.cowextsize = %u\n"), fsx.fsx_cowextsize);
+ printf(_("fsxattr.nextents = %u\n"), fsx.fsx_nextents);
+ printf(_("fsxattr.naextents = %u\n"), fsxa.fsx_nextents);
+ }
+ if ((xfsctl(file->name, file->fd, XFS_IOC_DIOINFO, &dio)) < 0) {
+ perror("XFS_IOC_DIOINFO");
+ } else {
+ printf(_("dioattr.mem = 0x%x\n"), dio.d_mem);
+ printf(_("dioattr.miniosz = %u\n"), dio.d_miniosz);
+ printf(_("dioattr.maxiosz = %u\n"), dio.d_maxiosz);
+ }
+ return 0;
+}
+
+static int
+statfs_f(
+ int argc,
+ char **argv)
+{
+ struct xfs_fsop_counts fscounts;
+ struct xfs_fsop_geom fsgeo;
+ struct statfs st;
+
+ printf(_("fd.path = \"%s\"\n"), file->name);
+ if (platform_fstatfs(file->fd, &st) < 0) {
+ perror("fstatfs");
+ } else {
+ printf(_("statfs.f_bsize = %lld\n"), (long long) st.f_bsize);
+ printf(_("statfs.f_blocks = %lld\n"), (long long) st.f_blocks);
+ printf(_("statfs.f_bavail = %lld\n"), (long long) st.f_bavail);
+ printf(_("statfs.f_files = %lld\n"), (long long) st.f_files);
+ printf(_("statfs.f_ffree = %lld\n"), (long long) st.f_ffree);
+ }
+ if (file->flags & IO_FOREIGN)
+ return 0;
+ if ((xfsctl(file->name, file->fd, XFS_IOC_FSGEOMETRY_V1, &fsgeo)) < 0) {
+ perror("XFS_IOC_FSGEOMETRY_V1");
+ } else {
+ printf(_("geom.bsize = %u\n"), fsgeo.blocksize);
+ printf(_("geom.agcount = %u\n"), fsgeo.agcount);
+ printf(_("geom.agblocks = %u\n"), fsgeo.agblocks);
+ printf(_("geom.datablocks = %llu\n"),
+ (unsigned long long) fsgeo.datablocks);
+ printf(_("geom.rtblocks = %llu\n"),
+ (unsigned long long) fsgeo.rtblocks);
+ printf(_("geom.rtextents = %llu\n"),
+ (unsigned long long) fsgeo.rtextents);
+ printf(_("geom.rtextsize = %u\n"), fsgeo.rtextsize);
+ printf(_("geom.sunit = %u\n"), fsgeo.sunit);
+ printf(_("geom.swidth = %u\n"), fsgeo.swidth);
+ }
+ if ((xfsctl(file->name, file->fd, XFS_IOC_FSCOUNTS, &fscounts)) < 0) {
+ perror("XFS_IOC_FSCOUNTS");
+ } else {
+ printf(_("counts.freedata = %llu\n"),
+ (unsigned long long) fscounts.freedata);
+ printf(_("counts.freertx = %llu\n"),
+ (unsigned long long) fscounts.freertx);
+ printf(_("counts.freeino = %llu\n"),
+ (unsigned long long) fscounts.freeino);
+ printf(_("counts.allocino = %llu\n"),
+ (unsigned long long) fscounts.allocino);
+ }
+ return 0;
+}
+
+void
+stat_init(void)
+{
+ stat_cmd.name = "stat";
+ stat_cmd.cfunc = stat_f;
+ stat_cmd.argmin = 0;
+ stat_cmd.argmax = 1;
+ stat_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+ stat_cmd.args = _("[-v]");
+ stat_cmd.oneline = _("statistics on the currently open file");
+
+ statfs_cmd.name = "statfs";
+ statfs_cmd.cfunc = statfs_f;
+ statfs_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+ statfs_cmd.oneline =
+ _("statistics on the filesystem of the currently open file");
+
+ add_command(&stat_cmd);
+ add_command(&statfs_cmd);
+}
next prev parent reply other threads:[~2017-04-06 18:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-06 18:43 [PATCH 0/3 V3] xfs_io: hook up statx Eric Sandeen
2017-04-06 18:46 ` Eric Sandeen [this message]
2017-04-10 21:47 ` [PATCH 1/3] xfs_io: move stat functions to new file Darrick J. Wong
2017-04-06 18:48 ` [PATCH 2/3] xfs_io: refactor stat functions, add raw dump Eric Sandeen
2017-04-10 21:48 ` Darrick J. Wong
2017-04-06 18:53 ` [PATCH 3/3] xfs_io: hook up statx Eric Sandeen
2017-04-10 21:33 ` [PATCH 3/3 V4] " Eric Sandeen
2017-04-10 21:56 ` Darrick J. Wong
2017-04-10 22:07 ` [PATCH 3/3 V5] " Eric Sandeen
2017-04-10 22:13 ` Darrick J. Wong
2017-04-10 22:36 ` [PATCH 0/3 V3] " David Howells
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=1db22b7b-b017-2584-49d8-bd875b2e1ae3@sandeen.net \
--to=sandeen@sandeen.net \
--cc=dhowells@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.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.