diff options
author | Suren A. Chilingaryan <csa@dside.dyndns.org> | 2011-12-13 20:37:47 +0100 |
---|---|---|
committer | Suren A. Chilingaryan <csa@dside.dyndns.org> | 2011-12-13 20:37:47 +0100 |
commit | e99ffb4b0b09d883666e621eba0bb41ac4233d9f (patch) | |
tree | 7691b2b877ae7df29eaabe30b75f35bc86b63295 | |
parent | 9c14774f2b6b22628a8b57b7a1e5edec1e236f9c (diff) | |
download | fastwriter-e99ffb4b0b09d883666e621eba0bb41ac4233d9f.tar.gz fastwriter-e99ffb4b0b09d883666e621eba0bb41ac4233d9f.tar.bz2 fastwriter-e99ffb4b0b09d883666e621eba0bb41ac4233d9f.tar.xz fastwriter-e99ffb4b0b09d883666e621eba0bb41ac4233d9f.zip |
Properly detect /dev/null as raw device and do not set DIRECT flag on raw devices
-rw-r--r-- | default.c | 13 | ||||
-rw-r--r-- | fastwriter.c | 3 | ||||
-rw-r--r-- | sysinfo.c | 6 | ||||
-rw-r--r-- | sysinfo.h | 4 |
4 files changed, 16 insertions, 10 deletions
@@ -61,7 +61,7 @@ int fastwriter_default_open(fastwriter_t *fw, const char *name, fastwriter_flags fastwriter_default_t *ctx; - err = get_file_fs(name, sizeof(fs) - 1, fs); + err = fastwriter_get_file_fs(name, sizeof(fs) - 1, fs); if (err) return err; ctx = (fastwriter_default_t*)malloc(sizeof(fastwriter_default_t)); @@ -72,7 +72,6 @@ int fastwriter_default_open(fastwriter_t *fw, const char *name, fastwriter_flags fw->ctx = ctx; #ifdef SYNC_MODE - open_flags |= O_DIRECT; ctx->sync_mode = 1; #endif /* SYNC_MODE */ @@ -82,6 +81,9 @@ int fastwriter_default_open(fastwriter_t *fw, const char *name, fastwriter_flags ctx->wr_block = EXT4_WRITEBLOCK; ctx->pa_block = 0; ctx->prior_size = (size_t)-1; +#ifdef SYNC_MODE + ctx->sync_mode = 0; +#endif /* SYNC_MODE */ } else if (!strcmp(fs, "ext4")) { ctx->wr_block = EXT4_WRITEBLOCK; ctx->pa_block = EXT4_PREALLOCATE; @@ -96,6 +98,12 @@ int fastwriter_default_open(fastwriter_t *fw, const char *name, fastwriter_flags ctx->pa_block = 0; } +#ifdef SYNC_MODE + if (ctx->sync_mode) { + open_flags |= O_DIRECT; + } +#endif /* SYNC_MODE */ + if (flags&FASTWRITER_FLAGS_OVERWRITE) open_flags |= O_TRUNC; @@ -180,7 +188,6 @@ int fastwriter_default_write(fastwriter_t *fw, fastwriter_write_flags_t flags, s do { res = write(ctx->fd, data + sum, size + delta - sum); -// printf("%i %i %p %zu %i\n", res, ctx->fd, data, size, delta); if (res < 0) { *written = sum; return errno; diff --git a/fastwriter.c b/fastwriter.c index 529acd6..84ef022 100644 --- a/fastwriter.c +++ b/fastwriter.c @@ -57,7 +57,7 @@ int fastwriter_open(fastwriter_t *ctx, const char *name, fastwriter_flags_t flag ctx->size = FASTWRITER_DEFAULT_BUFFER_SIZE; break; case FASTWRITER_BUFFER_MAX: - ctx->size = get_free_memory(); + ctx->size = fastwriter_get_free_memory(); if ((ctx->size - FASTWRITER_RESERVE_MEMORY) < FASTWRITER_DEFAULT_BUFFER_SIZE) ctx->size = FASTWRITER_DEFAULT_BUFFER_SIZE; @@ -266,7 +266,6 @@ int fastwriter_push(fastwriter_t *ctx, size_t size, const void *data) { if (ctx->pos < ctx->tail) end = ctx->tail; else end = ctx->size; - part1 = end - ctx->pos; if (part1 < size) { @@ -48,7 +48,7 @@ static int compare_mem_table_structs(const void *a, const void *b){ return strcmp(((const mem_table_struct*)a)->name,((const mem_table_struct*)b)->name); } -size_t get_free_memory(void){ +size_t fastwriter_get_free_memory(void){ char buf[4096]; unsigned long kb_main_buffers, kb_main_cached, kb_main_free; char namebuf[16]; /* big enough to hold any row name */ @@ -92,7 +92,7 @@ nextline: } -int get_file_fs(const char *fname, size_t size, char *fs) { +int fastwriter_get_file_fs(const char *fname, size_t size, char *fs) { int err = 0; char buf[4096]; char *fn; @@ -115,7 +115,7 @@ int get_file_fs(const char *fname, size_t size, char *fs) { } if (!stat(fn, &st)) { - if (S_ISBLK(st.st_mode)) { + if (!S_ISREG(st.st_mode)) { strcpy(fs, "raw"); goto clean; } @@ -1,7 +1,7 @@ #ifndef _PCITOOL_SYSINFO_H #define _PCITOOL_SYSINFO_H -size_t get_free_memory(); -int get_file_fs(const char *fname, size_t size, char *fs); +size_t fastwriter_get_free_memory(); +int fastwriter_get_file_fs(const char *fname, size_t size, char *fs); #endif /* _PCITOOL_SYSINFO_H */ |