diff --git a/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp b/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
index 6947a4902a1c36549c07b3f1157baf69be842471..41a705fea2dee070ac6b451ac4184c10528809a0 100644
--- a/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
+++ b/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
@@ -370,7 +370,6 @@ void AsyncFile::openReq(Request* request)
   const int mode = S_IRUSR | S_IWUSR |
 	           S_IRGRP | S_IWGRP |
 		   S_IROTH | S_IWOTH;
-retry:
   if(flags & FsOpenReq::OM_CREATE_IF_NONE){
     if((theFd = ::open(theFileName.c_str(), new_flags, mode)) != -1) {
       close(theFd);
@@ -449,9 +448,21 @@ void AsyncFile::openReq(Request* request)
       }
       if(size != 0)
       {
+	int err = errno;
+#ifdef O_DIRECT
+	if ((new_flags & O_DIRECT) && off == 0)
+	{
+	  ndbout_c("error on first write(%d), disable O_DIRECT", err);
+	  new_flags &= ~O_DIRECT;
+	  close(theFd);
+	  theFd = ::open(theFileName.c_str(), new_flags, mode);
+	  if (theFd != -1)
+	    continue;
+	}
+#endif
 	close(theFd);
 	unlink(theFileName.c_str());
-	request->error = errno;
+	request->error = err;
 	return;
       }
       off += request->par.open.page_size;