From: Dan Williams Date: Thu, 15 May 2008 06:48:33 +0000 (+1000) Subject: set resync_start in Incremental_container X-Git-Tag: devel~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0fd5c350e55590d2adbbb6ca16ec86391abda14b;p=thirdparty%2Fmdadm.git set resync_start in Incremental_container From: Dan Williams 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 --- diff --git a/mdadm.h b/mdadm.h index 27f0f382..176d1c30 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 cfbf7721..3c15ed29 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 8b5a6ff5..f0e95122 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; }