X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=bitmap.h;h=c8725a30eb338602ea37e56fe1a2dc6a4c731a07;hb=6b781d331bf52b01b9bafa6409ffb400f8c62895;hp=811485d14082750c6d1840303209bebba04bd2cd;hpb=e793c2e583740e9364c1285f61e14e687a1fbca1;p=thirdparty%2Fmdadm.git diff --git a/bitmap.h b/bitmap.h index 811485d1..c8725a30 100644 --- a/bitmap.h +++ b/bitmap.h @@ -6,8 +6,14 @@ #ifndef BITMAP_H #define BITMAP_H 1 -#define BITMAP_MAJOR 3 -#define BITMAP_MINOR 38 +#define BITMAP_MAJOR_LO 3 +/* version 4 insists the bitmap is in little-endian order + * with version 3, it is host-endian which is non-portable + */ +#define BITMAP_MAJOR_HI 4 +#define BITMAP_MAJOR_HOSTENDIAN 3 + +#define BITMAP_MINOR 39 /* * in-memory bitmap: @@ -43,6 +49,13 @@ * When we set a bit, or in the counter (to start a write), if the fields is * 0, we first set the disk bit and set the counter to 1. * + * If the counter is 0, the on-disk bit is clear and the stipe is clean + * Anything that dirties the stipe pushes the counter to 2 (at least) + * and sets the on-disk bit (lazily). + * If a periodic sweep find the counter at 2, it is decremented to 1. + * If the sweep find the counter at 1, the on-disk bit is cleared and the + * counter goes to zero. + * * Also, we'll hijack the "map" pointer itself and use it as two 16 bit block * counters as a fallback when "page" memory cannot be allocated: * @@ -140,15 +153,16 @@ typedef struct bitmap_super_s { __u32 state; /* 48 bitmap state information */ __u32 chunksize; /* 52 the bitmap chunk size in bytes */ __u32 daemon_sleep; /* 56 seconds between disk flushes */ + __u32 write_behind; /* 60 number of outstanding write-behind writes */ - __u8 pad[256 - 60]; /* set to zero */ + __u8 pad[256 - 64]; /* set to zero */ } bitmap_super_t; /* notes: * (1) This event counter is updated before the eventcounter in the md superblock * When a bitmap is loaded, it is only accepted if this event counter is equal * to, or one greater than, the event counter in the superblock. - * (2) This event counter is updated when the other one is *if*and*only*if* the + * (2) This event counter is updated when the other one is *if*and*only*if* the * array is not degraded. As bits are not cleared when the array is degraded, * this represents the last time that any bits were cleared. * If a device is being added that has an event count with this value or @@ -173,7 +187,7 @@ struct bitmap_page { unsigned int hijacked; /* * count of dirty bits on the page - */ + */ int count; };