r10891: I noticed that the secrets.db was not being backed up on my system due
authorAndrew Tridgell <tridge@samba.org>
Tue, 11 Oct 2005 05:01:52 +0000 (05:01 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:39:40 +0000 (13:39 -0500)
to msync/mmap not changing the mtime of the file. This patch ensures
that for successfully completed transactions we update the mtime.

I don't do this on all tdb writes as its too expensive, but doing it
just on transactions is bearable, as those cost quite a lot anyway.
(This used to be commit b2934732dd62f705f59c124f19460c5436a9a422)

source4/lib/tdb/common/transaction.c

index 9d370461163895e02edb420090174260b0a0609b..becc6cd0591afda4227316cd45eddba376ad0196 100644 (file)
@@ -857,6 +857,15 @@ int tdb_transaction_commit(struct tdb_context *tdb)
 
        tdb_brlock_len(tdb, GLOBAL_LOCK, F_UNLCK, F_SETLKW, 0, 1);
 
+       /* on some systems (like Linux 2.6.x) changes via mmap/msync
+          don't change the mtime of the file, this means the file may
+          not be backed up (as tdb rounding to block sizes means that
+          file size changes are quite rare too). The following forces
+          mtime changes when a transaction completes */
+#ifdef HAVE_UTIME
+       utime(tdb->name, NULL);
+#endif
+
        /* use a transaction cancel to free memory and remove the
           transaction locks */
        tdb_transaction_cancel(tdb);