]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix fadvise bug found by Robert Heinzmann
authorKern Sibbald <kern@sibbald.com>
Sat, 10 Oct 2015 16:51:13 +0000 (09:51 -0700)
committerKern Sibbald <kern@sibbald.com>
Sat, 10 Oct 2015 16:51:13 +0000 (09:51 -0700)
bacula/src/findlib/bfile.c

index 92d62861450f153662ea3dcde94c73453f51d313..99b3a5fe5085e0effa0dfe2219b020ecf332376f 100644 (file)
@@ -537,9 +537,10 @@ int bopen(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode)
    bfd->win32DecompContext.liNextHeader = 0;
 
 #if defined(HAVE_POSIX_FADVISE) && defined(POSIX_FADV_WILLNEED)
-   if (bfd->fid != -1 && flags & O_RDONLY) {
+   /* If not RDWR or WRONLY must be Read Only */
+   if (bfd->fid != -1 && !(flags & (O_RDWR|O_WRONLY))) {
       int stat = posix_fadvise(bfd->fid, 0, 0, POSIX_FADV_WILLNEED);
-      Dmsg2(400, "Did posix_fadvise on %s stat=%d\n", fname, stat);
+      Dmsg3(400, "Did posix_fadvise WILLNEED on %s fid=%d stat=%d\n", fname, bfd->fid, stat);
    }
 #endif
 
@@ -585,10 +586,12 @@ int bclose(BFILE *bfd)
    }
 
 #if defined(HAVE_POSIX_FADVISE) && defined(POSIX_FADV_DONTNEED)
-   if (bfd->m_flags & O_RDONLY) {
+   /* If not RDWR or WRONLY must be Read Only */
+   if (!(bfd->m_flags & (O_RDWR|O_WRONLY))) {
       fdatasync(bfd->fid);            /* sync the file */
       /* Tell OS we don't need it any more */
       posix_fadvise(bfd->fid, 0, 0, POSIX_FADV_DONTNEED);
+      Dmsg1(400, "Did posix_fadvise DONTNEED on fid=%d\n", bfd->fid);
    }
 #endif
 
@@ -653,4 +656,3 @@ boffset_t blseek(BFILE *bfd, boffset_t offset, int whence)
    bfd->berrno = errno;
    return pos;
 }
-