From: Kern S. <ke...@us...> - 2006-05-26 21:02:34
|
Update of /cvsroot/bacula/bacula/src/filed In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv23410/src/filed Modified Files: backup.c job.c verify.c Log Message: 26May06 - Prevent DVD code from rewriting label if the device cannot be opened read/write. - Used __GNUC__ to detect GNU g++ as suggested by John Goerzen to fix Debian build bug. - Fix Dir/SD run race in migrate.c, verify.c, and restore.c - Integrate manpages contributed by Jose Luis. - Update projects file. - Add manpages Makefile.in to configure.in - Remove installation of bacula.8 in scripts directory. 24May06 - Implement patch submitted by cesarb in bug #606 to implement O_NOATIME support. O_NOATIME is a open() flag which makes it possible to read a file without updating the inode atime (and also without the inode ctime update which happens if you try to set the atime back to its previous value). It also prevents a race condition when two programs are reading the same file, but only one does not want to change the atime. It's most useful for backup programs and file integrity checkers (and bacula can fit on both categories). Recent versions of the Linux kernel and glibc have support for it (the glibc support being mostly copying the O_NOATIME definition to bits/fcntl.h). If there's no support for it on the kernel, trying to use it does nothing (since the kernel ignores unknown flags). If the kernel has support for it, trying to use it either works, fails silently (mostly in remote filesystems), or returns errno=EPERM (if you are not either the owner of the file or root). A simple way to prevent the failure is to open the file without the flag and set it later with fcntl(F_SETFL), ignoring any EPERM errors. - Applied patch posted by Jaime Ventura to bug #570 to correct failure of restarted jobs to complete (due to a destroyed pthreads conditional variable used by the message thread). - Fixed bug #619 where Bacula would not restart jobs with MaxRestartTimes set to zero. - Apply patch from John Goerzen bug #611 to fix bad manual links in the code. - Apply patch from Rudolf Cejka bug #614 to removed trailing colons in query.sql file. - Apply patch from Rudolf Cejka bug #613 to correct prunning of files not to create orphans. - Apply patch from Rudolf Cejka bug #617 to use mtime instead of ctime in restore long listing. - Apply patch from Rudolf Cejka bug #609 to use MarkId in verify.c instead of incorrect MarkedId. - Apply patch from adioso bug #616 to correct text in manual (replace Director with File daemon). - Rework a few of the zlib changes so that they build properly. Index: job.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/filed/job.c,v retrieving revision 1.138 retrieving revision 1.139 diff -u -d -r1.138 -r1.139 --- job.c 28 Apr 2006 13:19:33 -0000 1.138 +++ job.c 26 May 2006 21:02:29 -0000 1.139 @@ -926,6 +926,9 @@ fo->GZIP_level = *++p - '0'; Dmsg1(200, "Compression level=%d\n", fo->GZIP_level); break; + case 'K': + fo->flags |= FO_NOATIME; + break; default: Emsg1(M_ERROR, 0, _("Unknown include/exclude option: %c\n"), *p); break; Index: verify.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/filed/verify.c,v retrieving revision 1.47 retrieving revision 1.48 diff -u -d -r1.47 -r1.48 --- verify.c 14 Mar 2006 19:37:20 -0000 1.47 +++ verify.c 26 May 2006 21:02:29 -0000 1.48 @@ -277,7 +277,8 @@ if (ff_pkt->statp.st_size > 0 || ff_pkt->type == FT_RAW || ff_pkt->type == FT_FIFO) { - if ((bopen(&bfd, ff_pkt->fname, O_RDONLY | O_BINARY, 0)) < 0) { + int noatime = ff_pkt->flags & FO_NOATIME ? O_NOATIME : 0; + if ((bopen(&bfd, ff_pkt->fname, O_RDONLY | O_BINARY | noatime, 0)) < 0) { ff_pkt->ff_errno = errno; berrno be; be.set_errno(bfd.berrno); Index: backup.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/filed/backup.c,v retrieving revision 1.108 retrieving revision 1.109 diff -u -d -r1.108 -r1.109 --- backup.c 23 May 2006 12:03:02 -0000 1.108 +++ backup.c 26 May 2006 21:02:29 -0000 1.109 @@ -387,7 +387,8 @@ } else { tid = NULL; } - if (bopen(&ff_pkt->bfd, ff_pkt->fname, O_RDONLY | O_BINARY, 0) < 0) { + int noatime = ff_pkt->flags & FO_NOATIME ? O_NOATIME : 0; + if (bopen(&ff_pkt->bfd, ff_pkt->fname, O_RDONLY | O_BINARY | noatime, 0) < 0) { ff_pkt->ff_errno = errno; berrno be; Jmsg(jcr, M_NOTSAVED, 0, _(" Cannot open %s: ERR=%s.\n"), ff_pkt->fname, @@ -729,9 +730,9 @@ rbuf, sd->msglen); ((z_stream*)jcr->pZLIB_compress_workset)->next_in = (Bytef *)rbuf; - ((z_stream*)jcr->pZLIB_compress_workset)->avail_in = sd->msglen; + ((z_stream*)jcr->pZLIB_compress_workset)->avail_in = sd->msglen; ((z_stream*)jcr->pZLIB_compress_workset)->next_out = (Bytef *)cbuf; - ((z_stream*)jcr->pZLIB_compress_workset)->avail_out = compress_len; + ((z_stream*)jcr->pZLIB_compress_workset)->avail_out = compress_len; if ((zstat=deflate((z_stream*)jcr->pZLIB_compress_workset, Z_FINISH)) != Z_STREAM_END) { Jmsg(jcr, M_FATAL, 0, _("Compression deflate error: %d\n"), zstat); |