tdb2: add write flag to tdb_direct
authorRusty Russell <rusty@rustcorp.com.au>
Wed, 1 Dec 2010 13:14:14 +0000 (23:44 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 1 Dec 2010 13:14:14 +0000 (23:44 +1030)
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
ccan/tdb2/private.h
ccan/tdb2/transaction.c

index 82c49406abc1e962a93ad24096203e6a25906245..ffd952d2aae3d23acab3af69b3ebc08ce9850ada 100644 (file)
@@ -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 };
 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) {
 
        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 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;
        }
                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))) {
        }
 
        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;
                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)))
        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;
 
        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)))
        }
 
        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;
 
        if (!ret) {
                struct tdb_access_hdr *hdr;
@@ -546,7 +548,8 @@ int tdb_access_commit(struct tdb_context *tdb, void *p)
        return ret;
 }
 
        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;
 {
        if (unlikely(!tdb->map_ptr))
                return NULL;
index e29bda96cb60d3709619d12364ac196f5cc7a4d3..b60f33a0a2012224d9e3192090cad82dd1d76d64 100644 (file)
@@ -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);
        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);
 };
 
 /*
 };
 
 /*
index 92658026ac9c006c5e6f9bf31b99f77bb116abc6..ab287bf195ece587611a05e67f6d7de712ad5961 100644 (file)
@@ -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,
 }
 
 static void *transaction_direct(struct tdb_context *tdb, tdb_off_t off,
-                               size_t len)
+                               size_t len, bool write)
 {
        /* FIXME */
        return NULL;
 {
        /* FIXME */
        return NULL;