Mercurial > dovecot > core-2.2
changeset 18319:fa42da3cc614
lib-fs: Optimized fs_stat() for fs-metawrap after writing a file.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 09 Mar 2015 21:27:51 +0200 |
parents | 4a80d3bbf14d |
children | 13021170e269 |
files | src/lib-fs/fs-metawrap.c |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-fs/fs-metawrap.c Mon Mar 09 20:33:13 2015 +0200 +++ b/src/lib-fs/fs-metawrap.c Mon Mar 09 21:27:51 2015 +0200 @@ -354,6 +354,8 @@ input2 = i_stream_create_concat(inputs); i_stream_unref(&inputs[0]); i_stream_unref(&inputs[1]); + + file->metadata_write_size = str_len(file->metadata_header); return input2; } @@ -450,6 +452,16 @@ if (!file->fs->wrap_metadata) return fs_stat(file->super, st_r); + + if (file->metadata_write_size != 0) { + /* fs_stat() after a write. we can do this quickly. */ + if (fs_stat(file->super, st_r) < 0) + return -1; + i_assert((uoff_t)st_r->st_size > file->metadata_write_size); + st_r->st_size -= file->metadata_write_size; + return 0; + } + input = fs_read_stream(_file, IO_BLOCK_SIZE); if ((ret = i_stream_get_size(input, TRUE, &input_size)) < 0) { fs_set_error(_file->fs, "i_stream_get_size(%s) failed: %m",