[PATCH V2] xfstests: get fsstress DIO working on non-xfs filesystems

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

 



Pretty sure all DIO IO fails in fsstress today since XFS_IOC_DIOINFO
fails.  If so, rather than just bailing out on the op, assign
some sane default DIO parameters, getting min IO size from
sector size if possible.

Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxxx>
---

V2: factor out get_alignment, use BLKSSZGET for min DIO size
rather than guessing at 512.


diff --git a/ltp/fsstress.c b/ltp/fsstress.c
index 5d5611f..af06059 100644
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -550,6 +550,27 @@ int main(int argc, char **argv)
 	return 0;
 }
 
+/*
+ * Get alignment via XFS_IOC_DIOINFO, else fall back to
+ * best guess from BLKSSZGET, else return -1.
+ */
+static int
+get_alignment(pathname_t *f, int fd, struct dioattr *dio)
+{
+	if (xfsctl(f->path, fd, XFS_IOC_DIOINFO, dio) < 0) {
+		int sectorsize;
+
+		if (ioctl(fd, BLKSSZGET, &sectorsize) < 0)
+			return -1;
+
+		dio->d_maxiosz = -1U;
+		dio->d_miniosz = sectorsize;
+		dio->d_mem = sectorsize;
+	}
+
+	return 0;
+}
+
 void
 add_to_flist(int ft, int id, int parent)
 {
@@ -1965,10 +1986,10 @@ dread_f(int opno, long r)
 		close(fd);
 		return;
 	}
-	if (xfsctl(f.path, fd, XFS_IOC_DIOINFO, &diob) < 0) {
+	if (get_alignment(&f, fd, &diob) < 0) {
 		if (v)
 			printf(
-			"%d/%d: dread - xfsctl(XFS_IOC_DIOINFO) %s%s failed %d\n",
+			"%d/%d: dread - get_alignment %s%s failed %d\n",
 				procid, opno, f.path, st, errno);
 		free_pathname(&f);
 		close(fd);
@@ -2037,9 +2058,9 @@ dwrite_f(int opno, long r)
 		return;
 	}
 	inode_info(st, sizeof(st), &stb, v);
-	if (xfsctl(f.path, fd, XFS_IOC_DIOINFO, &diob) < 0) {
+	if (get_alignment(&f, fd, &diob) < 0) {
 		if (v)
-			printf("%d/%d: dwrite - xfsctl(XFS_IOC_DIOINFO)"
+			printf("%d/%d: dwrite - get_alignment"
 				" %s%s failed %d\n",
 			       procid, opno, f.path, st, errno);
 		free_pathname(&f);


_______________________________________________
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