All of lore.kernel.org
 help / color / mirror / Atom feed
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);
+}

  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.