summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@penguin.transmeta.com>2002-06-18 04:23:01 -0700
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-06-18 04:23:01 -0700
commitab6094f9f6c5a3ea954d58aa6bb9090d6e71487f (patch)
treed03c32379aa77fd4caf45cdc7c400fcf1786c4b8 /include
parent8309f3a8d7aaf94bb6179696277988ddecbd7791 (diff)
parent86711d5ed6932fe71188d0c66605e00d021cafd9 (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')
-rw-r--r--include/linux/raid/md.h9
-rw-r--r--include/linux/raid/md_k.h67
-rw-r--r--include/linux/raid/raid1.h3
-rw-r--r--include/linux/raid/raid5.h8
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;