[PATCH 05/11] xfstests: randholes: hide some Irix/Linux differences more tidily

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Define a macro "xfscntl()" that effectively hides the differences
between the Linux xfsctl() and Irix fcntl() kernel interfaces.

Signed-off-by: Alex Elder <aelder@xxxxxxx>

---
 src/randholes.c |   75 +++++++++++++++++---------------------------------------
 1 file changed, 24 insertions(+), 51 deletions(-)

Index: b/src/randholes.c
===================================================================
--- a/src/randholes.c
+++ b/src/randholes.c
@@ -46,6 +46,22 @@ struct fsxattr rtattr;
 
 #define	READ_XFER	10	/* block to read at a time when checking */
 
+/*
+ * Define xfscntl() to mask the difference between the Linux
+ * and the Irix fcntl() interfaces to XFS for user space.  The
+ * "cmd" argument is just the last part of the command, e.g.
+ * pass FSGETXATTR in place of either XFS_IOC_FSGETXATTR (Linux)
+ * F_FSGETXATTR (Irix).
+ *
+ */
+#ifdef	__sgi__	/* Irix */
+#  define xfscntl(filename, fd, cmd, arg) \
+		fcntl((fd), F_ ## cmd, (arg))
+#else	/* ! __sgi__ */
+#  define xfscntl(filename, fd, cmd, arg) \
+		xfsctl((filename), (fd), XFS_IOC_ ## cmd, (arg))
+#endif	/* ! __sgi__ */
+
 void
 usage(char *progname)
 {
@@ -139,21 +155,10 @@ writeblks(char *fname, int fd)
 			fl.l_len = blocksize;
 			fl.l_whence = 0;
 
-#ifdef XFS_IOC_RESVSP64
-			if (xfsctl(fname, fd, XFS_IOC_RESVSP64, &fl) < 0) {
-				perror("xfsctl(XFS_IOC_RESVSP64)");
+			if (xfscntl(fname, fd, RESVSP64, &fl) < 0) {
+				perror("xfsnctl(RESVSP64)");
 				exit(1);
 			}
-#else
-#ifdef F_RESVSP64
-                        if (fcntl(fd, F_RESVSP64, &fl) < 0) {
-                                perror("fcntl(F_RESVSP64)");
-                                exit(1);
-                        }
-#else
-bozo!
-#endif
-#endif
 			continue;
 		}
 		SETBIT(valid, block);
@@ -353,9 +358,8 @@ main(int argc, char *argv[])
 	}
 
 	if (rt) {
-#ifdef XFS_IOC_FSGETXATTR
-		if (xfsctl(filename, fd, XFS_IOC_FSGETXATTR, &rtattr) < 0) {
-			perror("xfsctl(XFS_IOC_FSGETXATTR)");
+		if (xfscntl(filename, fd, FSGETXATTR, &rtattr) < 0) {
+			perror("xfsnctl(FSGETXATTR)");
 			return 1;
 		}
 		if ((rtattr.fsx_xflags & XFS_XFLAG_REALTIME) == 0 ||
@@ -363,49 +367,18 @@ main(int argc, char *argv[])
 			rtattr.fsx_xflags |= XFS_XFLAG_REALTIME;
 			if (extsize)
 				rtattr.fsx_extsize = extsize * blocksize;
-			if (xfsctl(filename, fd, XFS_IOC_FSSETXATTR, &rtattr) < 0) {
-				perror("xfsctl(XFS_IOC_FSSETXATTR)");
+			if (xfscntl(filename, fd, FSSETXATTR, &rtattr) < 0) {
+				perror("xfscntl(FSSETXATTR)");
 				return 1;
 			}
 		}
-#else
-#ifdef F_FSGETXATTR
-                if (fcntl(fd, F_FSGETXATTR, &rtattr) < 0) {
-                        perror("fcntl(F_FSGETXATTR)");
-                        return 1;
-                }
-                if ((rtattr.fsx_xflags & XFS_XFLAG_REALTIME) == 0 ||
-                    (extsize && rtattr.fsx_extsize != extsize * blocksize)) {
-                        rtattr.fsx_xflags |= XFS_XFLAG_REALTIME;
-                        if (extsize)
-                                rtattr.fsx_extsize = extsize * blocksize;
-                        if (fcntl(fd, F_FSSETXATTR, &rtattr) < 0) {
-                                perror("fcntl(F_FSSETXATTR)");
-                                return 1;
-                        }
-                }
-#else
-bozo!
-#endif
-#endif
 	}
 
 	if (direct) {
-#ifdef XFS_IOC_DIOINFO
-		if (xfsctl(filename, fd, XFS_IOC_DIOINFO, &diob) < 0) {
-			perror("xfsctl(XFS_IOC_FIOINFO)");
+		if (xfscntl(filename, fd, DIOINFO, &diob) < 0) {
+			perror("xfscntl(FIOINFO)");
 			return 1;
 		}
-#else
-#ifdef F_DIOINFO
-                if (fcntl(fd, F_DIOINFO, &diob) < 0) {
-                        perror("fcntl(F_FIOINFO)");
-                        return 1;
-                }
-#else
-bozo!
-#endif
-#endif
 		if (blocksize % diob.d_miniosz) {
 			fprintf(stderr,
 				"blocksize %d must be a multiple of %d for direct I/O\n",


_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs


[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux