dovecot-2.1: dbox: Avoid unnecessary fstat() call during file cr...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Mar 13 17:02:07 EET 2012
details: http://hg.dovecot.org/dovecot-2.1/rev/a3b162331cd1
changeset: 14297: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