diff options
| author | unknown <jonas@perch.ndb.mysql.com> | 2006-02-08 14:27:25 +0100 |
|---|---|---|
| committer | unknown <jonas@perch.ndb.mysql.com> | 2006-02-08 14:27:25 +0100 |
| commit | 0a614e7b3f7a648e8d4312228e76b099be37dff9 (patch) | |
| tree | cd2d6f4619a88cdbd3d5dfe03d840774ef1d9770 | |
| parent | 5abf604db84fe8c177655034a1516258553693f2 (diff) | |
| parent | 60ebb87e27140e7642ec9d4df58e87354afa3914 (diff) | |
| download | mariadb-git-0a614e7b3f7a648e8d4312228e76b099be37dff9.tar.gz | |
Merge mysqldev@production.mysql.com:/data0/mysqldev/my/mysql-5.1-release
into perch.ndb.mysql.com:/home/jonas/tmp/mysql-5.1-release
| -rw-r--r-- | storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp b/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp index 6947a4902a1..e0324c2c8ea 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); @@ -432,6 +431,7 @@ retry: m_fs.EXECUTE_DIRECT(block, GSN_FSWRITEREQ, signal, FsReadWriteReq::FixedLength + 1); + retry: Uint32 size = request->par.open.page_size; char* buf = (char*)m_page_ptr.p; while(size > 0){ @@ -449,9 +449,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) + goto retry; + } +#endif close(theFd); unlink(theFileName.c_str()); - request->error = errno; + request->error = err; return; } off += request->par.open.page_size; |
