On (20/01/28 17:25), John Ogness wrote: [..] > - while (user->seq == log_next_seq) { > + if (!prb_read_valid(prb, user->seq, r)) { > if (file->f_flags & O_NONBLOCK) { > ret = -EAGAIN; > logbuf_unlock_irq(); > @@ -890,30 +758,26 @@ static ssize_t devkmsg_read(struct file *file, char __user *buf, > > logbuf_unlock_irq(); > ret = wait_event_interruptible(log_wait, > - user->seq != log_next_seq); > + prb_read_valid(prb, user->seq, r)); > if (ret) > goto out; > logbuf_lock_irq(); > } > > - if (user->seq < log_first_seq) { > - /* our last seen message is gone, return error and reset */ > - user->idx = log_first_idx; > - user->seq = log_first_seq; > + if (user->seq < r->info->seq) { > + /* the expected message is gone, return error and reset */ > + user->seq = r->info->seq; > ret = -EPIPE; > logbuf_unlock_irq(); > goto out; > } Sorry, why doesn't this do something like if (user->seq < prb_first_seq(prb)) { /* the expected message is gone, return error and reset */ user->seq = prb_first_seq(prb); ret = -EPIPE; ... } ? -ss _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec