diff options
| author | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-06-18 04:23:01 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-06-18 04:23:01 -0700 |
| commit | ab6094f9f6c5a3ea954d58aa6bb9090d6e71487f (patch) | |
| tree | d03c32379aa77fd4caf45cdc7c400fcf1786c4b8 /include/linux/raid | |
| parent | 8309f3a8d7aaf94bb6179696277988ddecbd7791 (diff) | |
| parent | 86711d5ed6932fe71188d0c66605e00d021cafd9 (diff) | |
Merge penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/md-merge
into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux
Diffstat (limited to 'include/linux/raid')
| -rw-r--r-- | include/linux/raid/md.h | 9 | ||||
| -rw-r--r-- | include/linux/raid/md_k.h | 67 | ||||
| -rw-r--r-- | include/linux/raid/raid1.h | 3 | ||||
| -rw-r--r-- | include/linux/raid/raid5.h | 8 |
4 files changed, 17 insertions, 70 deletions
diff --git a/include/linux/raid/md.h b/include/linux/raid/md.h index cb6332482af2..19ebeb0a4988 100644 --- a/include/linux/raid/md.h +++ b/include/linux/raid/md.h @@ -63,8 +63,6 @@ extern int md_size[MAX_MD_DEVS]; extern struct hd_struct md_hd_struct[MAX_MD_DEVS]; -extern void add_mddev_mapping (mddev_t *mddev, kdev_t dev, void *data); -extern void del_mddev_mapping (mddev_t *mddev, kdev_t dev); extern char * partition_name (kdev_t dev); extern inline char * bdev_partition_name (struct block_device *bdev) { @@ -77,14 +75,9 @@ extern mdk_thread_t * md_register_thread (void (*run) (void *data), extern void md_unregister_thread (mdk_thread_t *thread); extern void md_wakeup_thread(mdk_thread_t *thread); extern void md_interrupt_thread (mdk_thread_t *thread); -extern int md_update_sb (mddev_t *mddev); -extern int md_do_sync(mddev_t *mddev, mdp_disk_t *spare); +extern void md_update_sb (mddev_t *mddev); extern void md_done_sync(mddev_t *mddev, int blocks, int ok); extern void md_sync_acct(kdev_t dev, unsigned long nr_sectors); -extern void md_recover_arrays (void); -extern int md_check_ordering (mddev_t *mddev); -extern int md_notify_reboot(struct notifier_block *this, - unsigned long code, void *x); extern int md_error (mddev_t *mddev, struct block_device *bdev); extern int md_run_setup(void); diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h index 7b270a50487e..e238bd222ea2 100644 --- a/include/linux/raid/md_k.h +++ b/include/linux/raid/md_k.h @@ -65,24 +65,6 @@ typedef struct mdk_rdev_s mdk_rdev_t; #define MAX_MD_DEVS (1<<MINORBITS) /* Max number of md dev */ /* - * Maps a kdev to an mddev/subdev. How 'data' is handled is up to - * the personality. (eg. HSM uses this to identify individual LVs) - */ -typedef struct dev_mapping_s { - mddev_t *mddev; - void *data; -} dev_mapping_t; - -extern dev_mapping_t mddev_map [MAX_MD_DEVS]; - -static inline mddev_t * kdev_to_mddev (kdev_t dev) -{ - if (major(dev) != MD_MAJOR) - BUG(); - return mddev_map[minor(dev)].mddev; -} - -/* * options passed in raidrun: */ @@ -196,31 +178,38 @@ struct mddev_s mdk_personality_t *pers; int __minor; mdp_super_t *sb; - int nb_dev; struct list_head disks; int sb_dirty; - mdu_param_t param; int ro; + + struct mdk_thread_s *sync_thread; /* doing resync or reconstruct */ unsigned long curr_resync; /* blocks scheduled */ unsigned long resync_mark; /* a recent timestamp */ unsigned long resync_mark_cnt;/* blocks written at resync_mark */ - char *name; + /* recovery_running is 0 for no recovery/resync, + * 1 for active recovery + * 2 for active resync + * -error for an error (e.g. -EINTR) + * it can only be set > 0 under reconfig_sem + */ int recovery_running; + int in_sync; /* know to not need resync */ struct semaphore reconfig_sem; - struct semaphore recovery_sem; - struct semaphore resync_sem; atomic_t active; + mdp_disk_t *spare; atomic_t recovery_active; /* blocks scheduled, but not written */ wait_queue_head_t recovery_wait; + request_queue_t queue; /* for plugging ... */ + struct list_head all_mddevs; }; struct mdk_personality_s { char *name; - int (*make_request)(mddev_t *mddev, int rw, struct bio *bio); + int (*make_request)(request_queue_t *q, struct bio *bio); int (*run)(mddev_t *mddev); int (*stop)(mddev_t *mddev); int (*status)(char *page, mddev_t *mddev); @@ -237,9 +226,6 @@ struct mdk_personality_s * SPARE_ACTIVE expects such a change) */ int (*diskop) (mddev_t *mddev, mdp_disk_t **descriptor, int state); - - int (*stop_resync)(mddev_t *mddev); - int (*restart_resync)(mddev_t *mddev); int (*sync_request)(mddev_t *mddev, sector_t sector_nr, int go_faster); }; @@ -279,13 +265,6 @@ extern mdp_disk_t *get_spare(mddev_t *mddev); #define ITERATE_RDEV(mddev,rdev,tmp) \ ITERATE_RDEV_GENERIC((mddev)->disks,same_set,rdev,tmp) -/* - * Same as above, but assumes that the device has rdev->desc_nr numbered - * from 0 to mddev->nb_dev, and iterates through rdevs in ascending order. - */ -#define ITERATE_RDEV_ORDERED(mddev,rdev,i) \ - for (i = 0; rdev = find_rdev_nr(mddev, i), i < mddev->nb_dev; i++) - /* * Iterates through all 'RAID managed disks' @@ -299,26 +278,6 @@ extern mdp_disk_t *get_spare(mddev_t *mddev); #define ITERATE_RDEV_PENDING(rdev,tmp) \ ITERATE_RDEV_GENERIC(pending_raid_disks,pending,rdev,tmp) -/* - * iterates through all used mddevs in the system. - */ -#define ITERATE_MDDEV(mddev,tmp) \ - \ - for (tmp = all_mddevs.next; \ - mddev = list_entry(tmp, mddev_t, all_mddevs), \ - tmp = tmp->next, tmp->prev != &all_mddevs \ - ; ) - -static inline int lock_mddev (mddev_t * mddev) -{ - return down_interruptible(&mddev->reconfig_sem); -} - -static inline void unlock_mddev (mddev_t * mddev) -{ - up(&mddev->reconfig_sem); -} - #define xchg_values(x,y) do { __typeof__(x) __tmp = x; \ x = y; y = __tmp; } while (0) diff --git a/include/linux/raid/raid1.h b/include/linux/raid/raid1.h index 3185c754e3fb..f9f02ab19bd3 100644 --- a/include/linux/raid/raid1.h +++ b/include/linux/raid/raid1.h @@ -33,8 +33,7 @@ struct r1_private_data_s { int working_disks; int last_used; sector_t next_seq_sect; - mdk_thread_t *thread, *resync_thread; - int resync_mirrors; + mdk_thread_t *thread; mirror_info_t *spare; spinlock_t device_lock; diff --git a/include/linux/raid/raid5.h b/include/linux/raid/raid5.h index 67f7bf471798..e14864259ffd 100644 --- a/include/linux/raid/raid5.h +++ b/include/linux/raid/raid5.h @@ -177,7 +177,7 @@ struct stripe_head { * is put on a "delayed" queue until there are no stripes currently * in a pre-read phase. Further, if the "delayed" queue is empty when * a stripe is put on it then we "plug" the queue and do not process it - * until an unplg call is made. (the tq_disk list is run). + * until an unplug call is made. (blk_run_queues is run). * * When preread is initiated on a stripe, we set PREREAD_ACTIVE and add * it to the count of prereading stripes. @@ -205,12 +205,11 @@ struct disk_info { struct raid5_private_data { struct stripe_head **stripe_hashtbl; mddev_t *mddev; - mdk_thread_t *thread, *resync_thread; + mdk_thread_t *thread; struct disk_info disks[MD_SB_DISKS]; struct disk_info *spare; int chunk_size, level, algorithm; int raid_disks, working_disks, failed_disks; - int resync_parity; int max_nr_stripes; struct list_head handle_list; /* stripes needing handling */ @@ -229,9 +228,6 @@ struct raid5_private_data { * waiting for 25% to be free */ spinlock_t device_lock; - - int plugged; - struct tq_struct plug_tq; }; typedef struct raid5_private_data raid5_conf_t; |
