]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/io.c
tdb2: reduce transaction before writing to recovery area.
[ccan] / ccan / tdb2 / io.c
index 4ed37ca2cffbeaac1c6398ac5dbf20926e6d0d83..8c5f45f30827c9e722227e3787797288713e056e 100644 (file)
@@ -48,8 +48,13 @@ void tdb_mmap(struct tdb_context *tdb)
        if (tdb->flags & TDB_NOMMAP)
                return;
 
-       tdb->file->map_ptr = mmap(NULL, tdb->file->map_size, tdb->mmap_flags,
-                                 MAP_SHARED, tdb->file->fd, 0);
+       /* size_t can be smaller than off_t. */
+       if ((size_t)tdb->file->map_size == tdb->file->map_size) {
+               tdb->file->map_ptr = mmap(NULL, tdb->file->map_size,
+                                         tdb->mmap_flags,
+                                         MAP_SHARED, tdb->file->fd, 0);
+       } else
+               tdb->file->map_ptr = MAP_FAILED;
 
        /*
         * NB. When mmap fails it returns MAP_FAILED *NOT* NULL !!!!
@@ -125,6 +130,7 @@ static enum TDB_ERROR tdb_oob(struct tdb_context *tdb, tdb_off_t len,
 /* Endian conversion: we only ever deal with 8 byte quantities */
 void *tdb_convert(const struct tdb_context *tdb, void *buf, tdb_len_t size)
 {
+       assert(size % 8 == 0);
        if (unlikely((tdb->flags & TDB_CONVERT)) && buf) {
                uint64_t i, *p = (uint64_t *)buf;
                for (i = 0; i < size / 8; i++)
@@ -342,7 +348,7 @@ enum TDB_ERROR tdb_write_off(struct tdb_context *tdb,
 static void *_tdb_alloc_read(struct tdb_context *tdb, tdb_off_t offset,
                             tdb_len_t len, unsigned int prefix)
 {
-       void *buf;
+       unsigned char *buf;
        enum TDB_ERROR ecode;
 
        /* some systems don't like zero length malloc */
@@ -592,12 +598,6 @@ void tdb_inc_seqnum(struct tdb_context *tdb)
        }
 }
 
-void add_stat_(struct tdb_context *tdb, uint64_t *s, size_t val)
-{
-       if ((uintptr_t)s < (uintptr_t)tdb->stats + tdb->stats->size)
-               *s += val;
-}
-
 static const struct tdb_methods io_methods = {
        tdb_read,
        tdb_write,