xfs_io: [v4] add the lseek() SEEK_DATA/SEEK_HOLE support
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 xfs_io: [v4] add the lseek() SEEK_DATA/SEEK_HOLE support
Add the lseek SEEK_DATA/SEEK_HOLE support into xfs_io. The result from the lseek() call will be printed to the output. For example:
xfs_io> lseek -h 609k
Type Offset
hole 630784
---
v1 -> v2 Add "-a" and "-r" options.
Simplify the output.
v2 -> v3 Refactor for configure.in -> configure.ac change.
SEEK_DATA with -1 offset behaves badly on older Linux. Display error message as "ERR <errno>".
v3 -> v4 Change command name to "seek"
Modified detection of first data/hole. Separate output routine.
Single loop to handle each data/hole item.
configure.ac | 1 include/builddefs.in | 1 io/Makefile | 5 + io/init.c | 1 io/io.h | 6 + io/seek.c | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++ m4/package_libcdev.m4 | 15 ++++ man/man8/xfs_io.8 | 35 ++++++++++ 8 files changed, 228 insertions(+)
configure.ac +1 -0
@@ -110,6 +110,7 @@ AC_HAVE_GETMNTINFO AC_HAVE_FALLOCATE AC_HAVE_FIEMAP AC_HAVE_PREADV +AC_HAVE_SEEK_DATA AC_HAVE_SYNC_FILE_RANGE AC_HAVE_BLKID_TOPO($enable_blkid)
include/builddefs.in +1 -0
@@ -102,6 +102,7 @@ HAVE_GETMNTINFO = @have_getmntinfo@ HAVE_FALLOCATE = @have_fallocate@ HAVE_FIEMAP = @have_fiemap@ HAVE_PREADV = @have_preadv@ +HAVE_SEEK_DATA = @have_seek_data@ HAVE_SYNC_FILE_RANGE = @have_sync_file_range@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall
io/Makefile +5 -0
@@ -80,6 +80,11 @@ ifeq ($(HAVE_PREADV),yes) LCFLAGS += -DHAVE_PREADV -DHAVE_PWRITEV endif +ifeq ($(HAVE_SEEK_DATA),yes) +LCFLAGS += -DHAVE_SEEK_DATA +CFILES += seek.c +endif + default: depend $(LTCOMMAND) include $(BUILDRULES)
io/init.c +1 -0
@@ -64,6 +64,7 @@ init_commands(void)help_init ();imap_init ();inject_init (); +seek_init ();madvise_init ();mincore_init ();mmap_init ();
io/io.h +6 -0
@@ -108,6 +108,12 @@ extern void quit_init(void);extern void shutdown_init (void );extern void truncate_init (void ); +#ifdef HAVE_SEEK_DATA +extern void seek_init (void ); +#else +#define seek_init () do { } while (0) +#endif +#ifdef HAVE_FADVISE extern void fadvise_init (void );#else
io/seek.c new file +174 -0
174 lines not on this page · raw message
m4/package_libcdev.m4 +15 -0
@@ -153,6 +153,21 @@ AC_DEFUN([AC_HAVE_PREADV], AC_SUBST(have_preadv) ]) +# +# Check if we have a working fadvise system call +# +AC_DEFUN([AC_HAVE_SEEK_DATA], + [ AC_MSG_CHECKING([for lseek SEEK_DATA]) + AC_TRY_COMPILE([ +#include <linux/fs.h> + ], [ + lseek(0, 0, SEEK_DATA); + ], have_seek_data=yes + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + AC_SUBST(have_seek_data) + ]) + # # Check if we have a sync_file_range libc call (Linux) #
man/man8/xfs_io.8 +35 -0
@@ -377,6 +377,41 @@ must be specified as another open file .RB ( \-f ) or by path .RB ( \-i ). +.TP +.BI "seek \-a | \-d | \-h [ \-r ] offset" +On platforms that support the +.BR lseek (2) +.B SEEK_DATA +and +.B SEEK_HOLE +options, display the offsets of the specified segments. +.RS 1.0i +.PD 0 +.TP 0.4i +.B \-a +Display both +.B data +and +.B hole +segments starting at the specified +.B offset. +.TP +.B \-d +Display the +.B data +segment starting at the specified +.B offset. +.TP +.B \-h +Display the +.B hole +segment starting at the specified +.B offset. +.TP +.B \-r +Recursively display all the specified segments starting at the specified +.B offset. +.TP .SH MEMORY MAPPED I/O COMMANDS .TP
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs