dovecot-2.2: dbox: Avoid unnecessary fstat() call during file cr...

dovecot at dovecot.org dovecot at dovecot.org
Sun May 20 03:26:27 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/a3b162331cd1
changeset: 14333:a3b162331cd1
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Mar 13 17:01:56 2012 +0200
description:
dbox: Avoid unnecessary fstat() call during file creation.

diffstat:

 src/lib-storage/index/dbox-common/dbox-file.c  |  2 +-
 src/lib-storage/index/dbox-common/dbox-file.h  |  1 +
 src/lib-storage/index/dbox-multi/mdbox-file.c  |  1 +
 src/lib-storage/index/dbox-single/sdbox-file.c |  1 +
 4 files changed, 4 insertions(+), 1 deletions(-)

diffs (45 lines):

diff -r 37d6dd0f053b -r a3b162331cd1 src/lib-storage/index/dbox-common/dbox-file.c
--- a/src/lib-storage/index/dbox-common/dbox-file.c	Tue Mar 13 16:32:56 2012 +0200
+++ b/src/lib-storage/index/dbox-common/dbox-file.c	Tue Mar 13 17:01:56 2012 +0200
@@ -588,7 +588,7 @@
 		return 0;
 	}
 
-	if (ctx->output->offset == 0) {
+	if (ctx->output->offset == 0 && !file->created) {
 		/* first append to existing file. seek to eof first. */
 		if (fstat(file->fd, &st) < 0) {
 			dbox_file_set_syscall_error(file, "fstat()");
diff -r 37d6dd0f053b -r a3b162331cd1 src/lib-storage/index/dbox-common/dbox-file.h
--- a/src/lib-storage/index/dbox-common/dbox-file.h	Tue Mar 13 16:32:56 2012 +0200
+++ b/src/lib-storage/index/dbox-common/dbox-file.h	Tue Mar 13 17:01:56 2012 +0200
@@ -116,6 +116,7 @@
 	ARRAY_DEFINE(metadata, const char *);
 	uoff_t metadata_read_offset;
 
+	unsigned int created:1; /* this file is now being created */
 	unsigned int appending:1;
 	unsigned int deleted:1;
 	unsigned int corrupted:1;
diff -r 37d6dd0f053b -r a3b162331cd1 src/lib-storage/index/dbox-multi/mdbox-file.c
--- a/src/lib-storage/index/dbox-multi/mdbox-file.c	Tue Mar 13 16:32:56 2012 +0200
+++ b/src/lib-storage/index/dbox-multi/mdbox-file.c	Tue Mar 13 17:01:56 2012 +0200
@@ -106,6 +106,7 @@
 	bool create_parents;
 	int ret;
 
+	_file->created = TRUE;
 	create_parents = dbox_file_is_in_alt(_file);
 	_file->fd = _file->storage->v.
 		file_create_fd(_file, _file->cur_path, create_parents);
diff -r 37d6dd0f053b -r a3b162331cd1 src/lib-storage/index/dbox-single/sdbox-file.c
--- a/src/lib-storage/index/dbox-single/sdbox-file.c	Tue Mar 13 16:32:56 2012 +0200
+++ b/src/lib-storage/index/dbox-single/sdbox-file.c	Tue Mar 13 17:01:56 2012 +0200
@@ -60,6 +60,7 @@
 	struct dbox_file *file;
 
 	file = sdbox_file_init(mbox, 0);
+	file->created = TRUE;
 	file->fd = file->storage->v.
 		file_create_fd(file, file->primary_path, FALSE);
 	return file;


More information about the dovecot-cvs mailing list