On 2023/7/31 14:15, Christoph Hellwig wrote: >> - list_for_each_entry_safe(rq, n, running, queuelist) { >> + list_for_each_entry_safe(rq, n, preflush_running, queuelist) { >> + unsigned int seq = blk_flush_cur_seq(rq); >> + >> + BUG_ON(seq != REQ_FSEQ_PREFLUSH && seq != REQ_FSEQ_POSTFLUSH); >> + blk_flush_complete_seq(rq, fq, seq, error); >> + } >> + >> + list_for_each_entry_safe(rq, n, postflush_running, queuelist) { >> unsigned int seq = blk_flush_cur_seq(rq); >> >> BUG_ON(seq != REQ_FSEQ_PREFLUSH && seq != REQ_FSEQ_POSTFLUSH); > > Shouldn't the BUG_ON be split into one that only checks for PREFLUSH and > one only for POSTFLUSH? Ah yes, will fix it. > >> + if (fq->flush_pending_idx != fq->flush_running_idx) >> + return; >> + >> + if (!list_empty(preflush_pending)) >> + first_rq = list_first_entry(preflush_pending, struct request, queuelist); >> + else if (!list_empty(postflush_pending)) >> + first_rq = list_first_entry(postflush_pending, struct request, queuelist); >> + else >> return; > > Hmm, I don't think both lists can be empty here? Yes if check fq->flush_pending_since != 0 before. > > I'd simplify this and avoid the overly long lines as: > > first_rq = list_first_entry_or_null(preflush_pending, struct request, > queuelist); > if (!first_rq) > first_rq = list_first_entry_or_null(postflush_pending, > struct request, queuelist); > This is better, will change it. Thanks.