Mac OS doesn't support the O_DIRECT flag, so use the F_NOCACHE
option of fcntl() instead. Fix taken from the libext2 project
on soruceforge.
Change-Id: I1e88a95e53f1bbbd8dbcfc7aa43a27443dfd6807
struct unix_private_data *data = NULL;
errcode_t retval;
int open_flags;
+ int f_nocache = 0;
struct stat st;
#ifdef __linux__
struct utsname ut;
if (flags & IO_FLAG_EXCLUSIVE)
open_flags |= O_EXCL;
if (flags & IO_FLAG_DIRECT_IO)
+#if !defined(O_DIRECT) && defined(F_NOCACHE)
+ f_nocache = F_NOCACHE;
+#else
open_flags |= O_DIRECT;
+#endif
data->flags = flags;
#ifdef HAVE_OPEN64
goto cleanup;
}
+ if (f_nocache) {
+ if (fcntl(data->dev, f_nocache, 1) < 0) {
+ retval = errno;
+ goto cleanup;
+ }
+ }
+
#ifdef BLKSSZGET
if (flags & IO_FLAG_DIRECT_IO) {
if (ioctl(data->dev, BLKSSZGET, &data->align) != 0)