diff options
author | Neil Brown <neilb@suse.de> | 2008-06-12 10:13:28 +1000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2008-06-12 10:13:28 +1000 |
commit | 57632f4afb3588465454187ca6ab66ffb200b677 (patch) | |
tree | 1e16e191a29d82d312937deb7769c0ca853c286f /monitor.c | |
parent | 80d26cb2fd18f814e1493aae92357868e044ae8b (diff) | |
download | mdadm-57632f4afb3588465454187ca6ab66ffb200b677.tar.gz mdadm-57632f4afb3588465454187ca6ab66ffb200b677.tar.xz mdadm-57632f4afb3588465454187ca6ab66ffb200b677.zip |
Some fixes to make failures in ddf get handled properly.
Diffstat (limited to 'monitor.c')
-rw-r--r-- | monitor.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -225,7 +225,7 @@ static int read_and_act(struct active_array *a) a->curr_action = read_action(a->action_fd); for (mdi = a->info.devs; mdi ; mdi = mdi->next) { mdi->next_state = 0; - if (mdi->state_fd > 0) + if (mdi->state_fd >= 0) mdi->curr_state = read_dev_state(mdi->state_fd); } @@ -307,16 +307,16 @@ static int read_and_act(struct active_array *a) if (a->next_action != bad_action) write_attr(sync_actions[a->next_action], a->action_fd); for (mdi = a->info.devs; mdi ; mdi = mdi->next) { - if (mdi->next_state == DS_REMOVE && mdi->state_fd > 0) { - int remove_err; + if (mdi->next_state == DS_REMOVE && mdi->state_fd >= 0) { + int remove_result; write_attr("-blocked", mdi->state_fd); /* the kernel may not be able to immediately remove the * disk, we can simply wait until the next event to try * again. */ - remove_err = write_attr("remove", mdi->state_fd); - if (!remove_err) { + remove_result = write_attr("remove", mdi->state_fd); + if (remove_result > 0) { close(mdi->state_fd); mdi->state_fd = -1; } |