From a56db4a5cbf4346ec8a74322b5267d47b2590ed7 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 1 Dec 2010 23:44:14 +1030 Subject: [PATCH] tdb2: add write flag to tdb_direct This is a precursor to direct access during transactions: they care about whether we are going to read or write to the file. --- ccan/tdb2/io.c | 15 +++++++++------ ccan/tdb2/private.h | 2 +- ccan/tdb2/transaction.c | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/ccan/tdb2/io.c b/ccan/tdb2/io.c index 82c49406..ffd952d2 100644 --- a/ccan/tdb2/io.c +++ b/ccan/tdb2/io.c @@ -173,7 +173,7 @@ uint64_t tdb_find_zero_off(struct tdb_context *tdb, tdb_off_t off, int zero_out(struct tdb_context *tdb, tdb_off_t off, tdb_len_t len) { char buf[8192] = { 0 }; - void *p = tdb->methods->direct(tdb, off, len); + void *p = tdb->methods->direct(tdb, off, len, true); assert(!tdb->read_only); if (p) { @@ -195,7 +195,8 @@ tdb_off_t tdb_read_off(struct tdb_context *tdb, tdb_off_t off) tdb_off_t ret; if (likely(!(tdb->flags & TDB_CONVERT))) { - tdb_off_t *p = tdb->methods->direct(tdb, off, sizeof(*p)); + tdb_off_t *p = tdb->methods->direct(tdb, off, sizeof(*p), + false); if (p) return *p; } @@ -356,7 +357,8 @@ int tdb_write_off(struct tdb_context *tdb, tdb_off_t off, tdb_off_t val) } if (likely(!(tdb->flags & TDB_CONVERT))) { - tdb_off_t *p = tdb->methods->direct(tdb, off, sizeof(*p)); + tdb_off_t *p = tdb->methods->direct(tdb, off, sizeof(*p), + true); if (p) { *p = val; return 0; @@ -463,7 +465,7 @@ const void *tdb_access_read(struct tdb_context *tdb, const void *ret = NULL; if (likely(!(tdb->flags & TDB_CONVERT))) - ret = tdb->methods->direct(tdb, off, len); + ret = tdb->methods->direct(tdb, off, len, false); if (!ret) { struct tdb_access_hdr *hdr; @@ -491,7 +493,7 @@ void *tdb_access_write(struct tdb_context *tdb, } if (likely(!(tdb->flags & TDB_CONVERT))) - ret = tdb->methods->direct(tdb, off, len); + ret = tdb->methods->direct(tdb, off, len, true); if (!ret) { struct tdb_access_hdr *hdr; @@ -546,7 +548,8 @@ int tdb_access_commit(struct tdb_context *tdb, void *p) return ret; } -static void *tdb_direct(struct tdb_context *tdb, tdb_off_t off, size_t len) +static void *tdb_direct(struct tdb_context *tdb, tdb_off_t off, size_t len, + bool write) { if (unlikely(!tdb->map_ptr)) return NULL; diff --git a/ccan/tdb2/private.h b/ccan/tdb2/private.h index e29bda96..b60f33a0 100644 --- a/ccan/tdb2/private.h +++ b/ccan/tdb2/private.h @@ -355,7 +355,7 @@ struct tdb_methods { int (*write)(struct tdb_context *, tdb_off_t, const void *, tdb_len_t); int (*oob)(struct tdb_context *, tdb_off_t, bool); int (*expand_file)(struct tdb_context *, tdb_len_t); - void *(*direct)(struct tdb_context *, tdb_off_t, size_t); + void *(*direct)(struct tdb_context *, tdb_off_t, size_t, bool); }; /* diff --git a/ccan/tdb2/transaction.c b/ccan/tdb2/transaction.c index 92658026..ab287bf1 100644 --- a/ccan/tdb2/transaction.c +++ b/ccan/tdb2/transaction.c @@ -363,7 +363,7 @@ static int transaction_expand_file(struct tdb_context *tdb, tdb_off_t addition) } static void *transaction_direct(struct tdb_context *tdb, tdb_off_t off, - size_t len) + size_t len, bool write) { /* FIXME */ return NULL; -- 2.39.2