diff options
Diffstat (limited to 'managemon.c')
-rw-r--r-- | managemon.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/managemon.c b/managemon.c index 6d1b3d85..3c1d4cb0 100644 --- a/managemon.c +++ b/managemon.c @@ -115,6 +115,8 @@ static void close_aa(struct active_array *aa) for (d = aa->info.devs; d; d = d->next) { close(d->recovery_fd); close(d->state_fd); + close(d->bb_fd); + close(d->ubb_fd); } if (aa->action_fd >= 0) @@ -433,6 +435,21 @@ static int disk_init_and_add(struct mdinfo *disk, struct mdinfo *clone, close(disk->recovery_fd); return -1; } + disk->bb_fd = sysfs_open2(aa->info.sys_name, disk->sys_name, + "bad_blocks"); + if (disk->bb_fd < 0) { + close(disk->recovery_fd); + close(disk->state_fd); + return -1; + } + disk->ubb_fd = sysfs_open2(aa->info.sys_name, disk->sys_name, + "unacknowledged_bad_blocks"); + if (disk->ubb_fd < 0) { + close(disk->recovery_fd); + close(disk->state_fd); + close(disk->bb_fd); + return -1; + } disk->prev_state = read_dev_state(disk->state_fd); disk->curr_state = disk->prev_state; disk->next = aa->info.devs; |