mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Apply the diskdata patch by Jonas.
storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp: Apply the diskdata patch by Jonas: the patch adds a fallback to the standard I/O if O_DIRECT does not work.
This commit is contained in:
@@ -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 @@ retry:
|
||||
}
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user