Tom Lane wrote: > I wrote: > > He's complaining that it dies with EINVAL. > > > I notice that (1) it's using O_DIRECT even though the printout claims > > otherwise, and (2) it's writing from a buffer that has no better than > > char alignment, which is certainly not OK for O_DIRECT. Either one > > of those could plausibly result in EINVAL ... > > Oh, scratch that: the buffer is properly aligned, it's the length that's > bogus for O_DIRECT. I rather imagine that test_open_sync is meant to be > writing so many kilobytes, not so many bytes.
Yes, that was a bug in my code that I have fixed with the attached, applied patch. Thanks for the report. -- Bruce Momjian <br...@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + It's impossible for everything to be true. +
diff --git a/contrib/pg_test_fsync/pg_test_fsync.c b/contrib/pg_test_fsync/pg_test_fsync.c index 7ece9b9..d8099a5 100644 *** /tmp/pgdiff.10514/8NsZJd_pg_test_fsync.c Mon Jan 24 19:41:20 2011 --- contrib/pg_test_fsync/pg_test_fsync.c Mon Jan 24 19:39:48 2011 *************** test_open_sync(const char *msg, int writ *** 421,427 **** for (ops = 0; ops < ops_per_test; ops++) { for (writes = 0; writes < 16 / writes_size; writes++) ! if (write(tmpfile, buf, writes_size) != writes_size) die("write failed"); if (lseek(tmpfile, 0, SEEK_SET) == -1) die("seek failed"); --- 421,428 ---- for (ops = 0; ops < ops_per_test; ops++) { for (writes = 0; writes < 16 / writes_size; writes++) ! if (write(tmpfile, buf, writes_size * 1024) != ! writes_size * 1024) die("write failed"); if (lseek(tmpfile, 0, SEEK_SET) == -1) die("seek failed");
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers