mirror of
https://github.com/schoebel/mars
synced 2025-04-24 12:21:44 +00:00
logger: fix opportunity for too-early input destruction
This commit is contained in:
parent
d1469b5b83
commit
1e369b366c
@ -2250,10 +2250,9 @@ void _exit_inputs(struct trans_logger_brick *brick, bool force)
|
|||||||
for (i = TL_INPUT_LOG1; i <= TL_INPUT_LOG2; i++) {
|
for (i = TL_INPUT_LOG1; i <= TL_INPUT_LOG2; i++) {
|
||||||
struct trans_logger_input *input = brick->inputs[i];
|
struct trans_logger_input *input = brick->inputs[i];
|
||||||
struct log_status *logst = &input->logst;
|
struct log_status *logst = &input->logst;
|
||||||
if (force ||
|
if (!input->connect &&
|
||||||
(!input->connect &&
|
|
||||||
input->is_operating &&
|
input->is_operating &&
|
||||||
input->is_deletable)) {
|
(input->is_deletable || force)) {
|
||||||
MARS_DBG("cleaning up input %d (log = %d old = %d)\n", i, brick->log_input_nr, brick->old_input_nr);
|
MARS_DBG("cleaning up input %d (log = %d old = %d)\n", i, brick->log_input_nr, brick->old_input_nr);
|
||||||
exit_logst(logst);
|
exit_logst(logst);
|
||||||
input->is_operating = false;
|
input->is_operating = false;
|
||||||
@ -2268,6 +2267,7 @@ static noinline
|
|||||||
void trans_logger_log(struct trans_logger_brick *brick)
|
void trans_logger_log(struct trans_logger_brick *brick)
|
||||||
{
|
{
|
||||||
struct rank_data rkd[LOGGER_QUEUES] = {};
|
struct rank_data rkd[LOGGER_QUEUES] = {};
|
||||||
|
int nr_flying;
|
||||||
|
|
||||||
_init_inputs(brick);
|
_init_inputs(brick);
|
||||||
|
|
||||||
@ -2323,7 +2323,12 @@ void trans_logger_log(struct trans_logger_brick *brick)
|
|||||||
|
|
||||||
_exit_inputs(brick, false);
|
_exit_inputs(brick, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while ((nr_flying = _nr_flying_inputs(brick))) {
|
||||||
|
MARS_INF("%d inputs have flying IO\n", nr_flying);
|
||||||
_exit_inputs(brick, true);
|
_exit_inputs(brick, true);
|
||||||
|
brick_msleep(1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////// log replay //////////////////////////////
|
////////////////////////////// log replay //////////////////////////////
|
||||||
@ -2500,6 +2505,7 @@ void trans_logger_replay(struct trans_logger_brick *brick)
|
|||||||
loff_t start_pos;
|
loff_t start_pos;
|
||||||
loff_t finished_pos;
|
loff_t finished_pos;
|
||||||
long long old_jiffies = jiffies;
|
long long old_jiffies = jiffies;
|
||||||
|
int nr_flying;
|
||||||
int backoff = 0;
|
int backoff = 0;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
@ -2610,7 +2616,11 @@ void trans_logger_replay(struct trans_logger_brick *brick)
|
|||||||
brick->replay_code = 2;
|
brick->replay_code = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while ((nr_flying = _nr_flying_inputs(brick))) {
|
||||||
|
MARS_INF("%d inputs have flying IO\n", nr_flying);
|
||||||
_exit_inputs(brick, true);
|
_exit_inputs(brick, true);
|
||||||
|
brick_msleep(1000);
|
||||||
|
}
|
||||||
|
|
||||||
mars_trigger();
|
mars_trigger();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user