The branch, v3-6-test has been updated via 9953e69 tdb_backup: avoid transaction on backup file, use lockall from 77b0bcc Fix Bug #8099 setpwent() actually does endpwent() and vice versa on FreeBSD
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test - Log ----------------------------------------------------------------- commit 9953e698611defdd6919883a965bdfc12ce51bd5 Author: Simo Sorce <i...@samba.org> Date: Sat Apr 9 22:21:35 2011 -0400 tdb_backup: avoid transaction on backup file, use lockall Transactions have the side effect of generating bigger files. By removing the transaction files get as much as 30% smaller. Autobuild-User: Simo Sorce <i...@samba.org> Autobuild-Date: Tue Apr 19 23:34:37 CEST 2011 on sn-devel-104 (cherry picked from commit 1804d9a64662d37f6c7c50bdd7b8edd80f42192b) ----------------------------------------------------------------------- Summary of changes: lib/tdb/tools/tdbbackup.c | 21 +++++++++++++-------- 1 files changed, 13 insertions(+), 8 deletions(-) Changeset truncated at 500 lines: diff --git a/lib/tdb/tools/tdbbackup.c b/lib/tdb/tools/tdbbackup.c index 6aca8dd..11ecaa0 100644 --- a/lib/tdb/tools/tdbbackup.c +++ b/lib/tdb/tools/tdbbackup.c @@ -152,8 +152,9 @@ static int backup_tdb(const char *old_name, const char *new_name, int hash_size) return 1; } - if (tdb_transaction_start(tdb_new) != 0) { - printf("Failed to start transaction on new tdb\n"); + /* lock the backup tdb so that nobody else can change it */ + if (tdb_lockall(tdb_new) != 0) { + printf("Failed to lock backup tdb\n"); tdb_close(tdb); tdb_close(tdb_new); unlink(tmp_name); @@ -177,12 +178,16 @@ static int backup_tdb(const char *old_name, const char *new_name, int hash_size) /* close the old tdb */ tdb_close(tdb); - if (tdb_transaction_commit(tdb_new) != 0) { - fprintf(stderr, "Failed to commit new tdb\n"); - tdb_close(tdb_new); - unlink(tmp_name); - free(tmp_name); - return 1; + /* copy done, unlock the backup tdb */ + tdb_unlockall(tdb_new); + +#ifdef HAVE_FDATASYNC + if (fdatasync(tdb_fd(tdb_new)) != 0) { +#else + if (fsync(tdb_fd(tdb_new)) != 0) { +#endif + /* not fatal */ + fprintf(stderr, "failed to fsync backup file\n"); } /* close the new tdb and re-open read-only */ -- Samba Shared Repository