summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2008-05-15 16:48:33 +1000
committerNeil Brown <neilb@suse.de>2008-05-15 16:48:33 +1000
commit0fd5c350e55590d2adbbb6ca16ec86391abda14b (patch)
tree5c1b6d74cf30067eb637cc49346f926c706539ac
parent3cfe6247400e92f85282da89dfea7f1d3ba88634 (diff)
downloadmdadm-0fd5c350e55590d2adbbb6ca16ec86391abda14b.tar.gz
mdadm-0fd5c350e55590d2adbbb6ca16ec86391abda14b.tar.xz
mdadm-0fd5c350e55590d2adbbb6ca16ec86391abda14b.zip
set resync_start in Incremental_container
From: Dan Williams <dan.j.williams@intel.com> Metadata handlers set mdinfo.resync_start depending on the state of the array. By default mdadm assumes the array is dirty and needs a full resync. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--mdadm.h1
-rw-r--r--super-intel.c5
-rw-r--r--sysfs.c1
3 files changed, 7 insertions, 0 deletions
diff --git a/mdadm.h b/mdadm.h
index 27f0f38..176d1c3 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -147,6 +147,7 @@ struct mdinfo {
*/
int reshape_active;
unsigned long long reshape_progress;
+ unsigned long long resync_start;
int new_level, delta_disks, new_layout, new_chunk;
int errors;
int cache_size; /* size of raid456 stripe cache*/
diff --git a/super-intel.c b/super-intel.c
index cfbf772..3c15ed2 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -1053,6 +1053,11 @@ static struct mdinfo *container_content_imsm(struct supertype *st)
this->array.chunk_size = __le16_to_cpu(map->blocks_per_strip) << 9;
this->array.state = !vol->dirty;
this->container_member = i;
+ if (map->map_state == IMSM_T_STATE_UNINITIALIZED || dev->vol.dirty)
+ this->resync_start = 0;
+ else
+ this->resync_start = ~0ULL;
+
strncpy(this->name, (char *) dev->volume, MAX_RAID_SERIAL_LEN);
this->name[MAX_RAID_SERIAL_LEN] = 0;
diff --git a/sysfs.c b/sysfs.c
index 8b5a6ff..f0e9512 100644
--- a/sysfs.c
+++ b/sysfs.c
@@ -325,6 +325,7 @@ int sysfs_set_array(struct mdinfo *sra,
rv |= sysfs_set_num(sra, NULL, "chunk_size", info->array.chunk_size);
rv |= sysfs_set_num(sra, NULL, "layout", info->array.layout);
rv |= sysfs_set_num(sra, NULL, "component_size", info->component_size);
+ rv |= sysfs_set_num(sra, NULL, "resync_start", info->resync_start);
sra->array = info->array;
return rv;
}