]> err.no Git - linux-2.6/blobdiff - include/linux/raid/md_k.h
Merge master.kernel.org:/pub/scm/linux/kernel/git/lenb/to-linus
[linux-2.6] / include / linux / raid / md_k.h
index d92db54255a356bcd610ce074ea2e4a5e5747fac..8c14ba565a45b95093b0a65e113bda2898f1d358 100644 (file)
@@ -183,6 +183,10 @@ struct mdk_rdev_s
 
        int desc_nr;                    /* descriptor index in the superblock */
        int raid_disk;                  /* role of device in array */
+       int saved_raid_disk;            /* role that device used to have in the
+                                        * array and could again if we did a partial
+                                        * resync from the bitmap
+                                        */
 
        atomic_t        nr_pending;     /* number of pending requests.
                                         * only maintained for arrays that
@@ -257,7 +261,8 @@ struct mddev_s
        sector_t                        recovery_cp;
 
        spinlock_t                      write_lock;
-       struct bio_list                 write_list;
+       wait_queue_head_t               sb_wait;        /* for waiting on superblock updates */
+       atomic_t                        pending_writes; /* number of active superblock writes */
 
        unsigned int                    safemode;       /* if set, update "clean" superblock
                                                         * when no writes pending.
@@ -267,6 +272,13 @@ struct mddev_s
        atomic_t                        writes_pending; 
        request_queue_t                 *queue; /* for plugging ... */
 
+       struct bitmap                   *bitmap; /* the bitmap for the device */
+       struct file                     *bitmap_file; /* the bitmap file */
+       long                            bitmap_offset; /* offset from superblock of
+                                                       * start of bitmap. May be
+                                                       * negative, but not '0'
+                                                       */
+
        struct list_head                all_mddevs;
 };
 
@@ -298,7 +310,7 @@ struct mdk_personality_s
        int (*hot_add_disk) (mddev_t *mddev, mdk_rdev_t *rdev);
        int (*hot_remove_disk) (mddev_t *mddev, int number);
        int (*spare_active) (mddev_t *mddev);
-       int (*sync_request)(mddev_t *mddev, sector_t sector_nr, int go_faster);
+       sector_t (*sync_request)(mddev_t *mddev, sector_t sector_nr, int *skipped, int go_faster);
        int (*resize) (mddev_t *mddev, sector_t sectors);
        int (*reshape) (mddev_t *mddev, int raid_disks);
        int (*reconfig) (mddev_t *mddev, int layout, int chunk_size);
@@ -341,6 +353,7 @@ typedef struct mdk_thread_s {
        unsigned long           flags;
        struct completion       *event;
        struct task_struct      *tsk;
+       unsigned long           timeout;
        const char              *name;
 } mdk_thread_t;