if (fd < 0)
return;
if (fstat(fd, &st) == -1) {
- dprintf("%s: Invalid fd %d\n", __func__, fd);
+ dprintf("Invalid fd %d\n", fd);
return;
}
if (st.st_nlink == 0) {
- dprintf("%s: fd %d was deleted\n", __func__, fd);
+ dprintf("fd %d was deleted\n", fd);
return;
}
if (fd > *maxfd)
n = read_attr(buf, 30, fd);
if (n <= 0) {
- dprintf("%s: Failed to read resync_start (%d)\n",
- __func__, fd);
+ dprintf("Failed to read resync_start (%d)\n", fd);
return;
}
if (strncmp(buf, "none", 4) == 0)
int read_dev_state(int fd)
{
- char buf[60];
- int n = read_attr(buf, 60, fd);
+ char buf[100];
+ int n = read_attr(buf, sizeof(buf), fd);
char *cp;
int rv = 0;
}
gettimeofday(&tv, NULL);
- dprintf("%s(%d): %ld.%06ld state:%s prev:%s action:%s prev: %s start:%llu\n",
- __func__, a->info.container_member,
+ dprintf("(%d): %ld.%06ld state:%s prev:%s action:%s prev: %s start:%llu\n",
+ a->info.container_member,
tv.tv_sec, tv.tv_usec,
array_states[a->curr_state],
array_states[a->prev_state],
a->info.resync_start
);
- if (a->curr_state > inactive &&
- a->prev_state == inactive) {
- /* array has been started
- * possible that container operation has to be completed
- */
- a->container->ss->set_array_state(a, 0);
- }
if ((a->curr_state == bad_word || a->curr_state <= inactive) &&
a->prev_state > inactive) {
/* array has been stopped */
if (sync_completed > a->last_checkpoint)
a->last_checkpoint = sync_completed;
- if (deactivate || a->curr_state >= clean)
- a->container->ss->sync_metadata(a->container);
- dprintf("%s(%d): state:%s action:%s next(", __func__, a->info.container_member,
+ if (sync_completed >= a->info.component_size)
+ a->last_checkpoint = 0;
+
+ a->container->ss->sync_metadata(a->container);
+ dprintf("(%d): state:%s action:%s next(", a->info.container_member,
array_states[a->curr_state], sync_actions[a->curr_action]);
/* Effect state changes in the array */
if (a->next_state != bad_word) {
- dprintf(" state:%s", array_states[a->next_state]);
+ dprintf_cont(" state:%s", array_states[a->next_state]);
write_attr(array_states[a->next_state], a->info.state_fd);
}
if (a->next_action != bad_action) {
write_attr(sync_actions[a->next_action], a->action_fd);
- dprintf(" action:%s", sync_actions[a->next_action]);
+ dprintf_cont(" action:%s", sync_actions[a->next_action]);
}
for (mdi = a->info.devs; mdi ; mdi = mdi->next) {
if (mdi->next_state & DS_UNBLOCK) {
- dprintf(" %d:-blocked", mdi->disk.raid_disk);
+ dprintf_cont(" %d:-blocked", mdi->disk.raid_disk);
write_attr("-blocked", mdi->state_fd);
}
*/
remove_result = write_attr("remove", mdi->state_fd);
if (remove_result > 0) {
- dprintf(" %d:removed", mdi->disk.raid_disk);
+ dprintf_cont(" %d:removed", mdi->disk.raid_disk);
close(mdi->state_fd);
close(mdi->recovery_fd);
+ close(mdi->bb_fd);
+ close(mdi->ubb_fd);
mdi->state_fd = -1;
} else
ret |= ARRAY_BUSY;
}
if (mdi->next_state & DS_INSYNC) {
write_attr("+in_sync", mdi->state_fd);
- dprintf(" %d:+in_sync", mdi->disk.raid_disk);
+ dprintf_cont(" %d:+in_sync", mdi->disk.raid_disk);
}
}
- dprintf(" )\n");
+ dprintf_cont(" )\n");
/* move curr_ to prev_ */
a->prev_state = a->curr_state;
add_fd(&rfds, &maxfd, a->info.state_fd);
add_fd(&rfds, &maxfd, a->action_fd);
add_fd(&rfds, &maxfd, a->sync_completed_fd);
- for (mdi = a->info.devs ; mdi ; mdi = mdi->next)
+ for (mdi = a->info.devs ; mdi ; mdi = mdi->next) {
add_fd(&rfds, &maxfd, mdi->state_fd);
+ add_fd(&rfds, &maxfd, mdi->bb_fd);
+ add_fd(&rfds, &maxfd, mdi->ubb_fd);
+ }
ap = &(*ap)->next;
}