summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMariusz Tkaczyk <mariusz.tkaczyk@intel.com>2019-07-15 09:25:35 +0200
committerJes Sorensen <jsorensen@fb.com>2019-08-14 08:54:04 -0400
commit91c97c5432028875db5f8abeddb5cb5f31902001 (patch)
treedf5d245f546425d6d305b7e29d8fde3b616cc239
parent1a52f1fc0266d438c996789d4addbfac999a6139 (diff)
downloadmdadm-91c97c5432028875db5f8abeddb5cb5f31902001.tar.gz
imsm: close removed drive fd.
When member drive fails, managemon prepares metadata update and adds the drive to disk_mgmt_list with DISK_REMOVE flag. It fills only minor and major. It is enough to recognize the device later. Monitor thread while processing this update will remove the drive from super only if it is a spare. It never removes failed member from disks list. As a result, it still keeps opened descriptor to non-existing device. If removed drive is not a spare fill fd in disk_cfg structure (prepared by managemon), monitor will close fd during freeing it. Also set this drive fd to -1 in super to avoid double closing because monitor will close the fd (if needed) while replacing removed drive in array. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
-rw-r--r--super-intel.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/super-intel.c b/super-intel.c
index d7e8a65f..a103a3fc 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -9200,6 +9200,9 @@ static int add_remove_disk_update(struct intel_super *super)
remove_disk_super(super,
disk_cfg->major,
disk_cfg->minor);
+ } else {
+ disk_cfg->fd = disk->fd;
+ disk->fd = -1;
}
}
/* release allocate disk structure */