fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / linux / raid / bitmap.h
index 8994378..6db9a4c 100644 (file)
@@ -140,21 +140,22 @@ typedef __u16 bitmap_counter_t;
 enum bitmap_state {
        BITMAP_ACTIVE = 0x001, /* the bitmap is in use */
        BITMAP_STALE  = 0x002,  /* the bitmap file is out of date or had -EIO */
+       BITMAP_WRITE_ERROR = 0x004, /* A write error has occurred */
        BITMAP_HOSTENDIAN = 0x8000,
 };
 
 /* the superblock at the front of the bitmap file -- little endian */
 typedef struct bitmap_super_s {
-       __u32 magic;        /*  0  BITMAP_MAGIC */
-       __u32 version;      /*  4  the bitmap major for now, could change... */
-       __u8  uuid[16];     /*  8  128 bit uuid - must match md device uuid */
-       __u64 events;       /* 24  event counter for the bitmap (1)*/
-       __u64 events_cleared;/*32  event counter when last bit cleared (2) */
-       __u64 sync_size;    /* 40  the size of the md device's sync range(3) */
-       __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 */
+       __le32 magic;        /*  0  BITMAP_MAGIC */
+       __le32 version;      /*  4  the bitmap major for now, could change... */
+       __u8  uuid[16];      /*  8  128 bit uuid - must match md device uuid */
+       __le64 events;       /* 24  event counter for the bitmap (1)*/
+       __le64 events_cleared;/*32  event counter when last bit cleared (2) */
+       __le64 sync_size;    /* 40  the size of the md device's sync range(3) */
+       __le32 state;        /* 48  bitmap state information */
+       __le32 chunksize;    /* 52  the bitmap chunk size in bytes */
+       __le32 daemon_sleep; /* 56  seconds between disk flushes */
+       __le32 write_behind; /* 60  number of outstanding write-behind writes */
 
        __u8  pad[256 - 64]; /* set to zero */
 } bitmap_super_t;
@@ -244,15 +245,10 @@ struct bitmap {
        unsigned long daemon_lastrun; /* jiffies of last run */
        unsigned long daemon_sleep; /* how many seconds between updates? */
 
-       /*
-        * bitmap_writeback_daemon waits for file-pages that have been written,
-        * as there is no way to get a call-back when a page write completes.
-        */
-       mdk_thread_t *writeback_daemon;
-       spinlock_t write_lock;
+       atomic_t pending_writes; /* pending writes to the bitmap file */
        wait_queue_head_t write_wait;
-       struct list_head complete_pages;
-       mempool_t *write_pool;
+       wait_queue_head_t overflow_wait;
+
 };
 
 /* the bitmap API */
@@ -270,6 +266,8 @@ int bitmap_update_sb(struct bitmap *bitmap);
 int  bitmap_setallbits(struct bitmap *bitmap);
 void bitmap_write_all(struct bitmap *bitmap);
 
+void bitmap_dirty_bits(struct bitmap *bitmap, unsigned long s, unsigned long e);
+
 /* these are exported */
 int bitmap_startwrite(struct bitmap *bitmap, sector_t offset,
                        unsigned long sectors, int behind);