Re: [PATCH v3 15/18] nvmet-fc: free pending reqs on tgtport unregister
From: Daniel Wagner
Date: Tue Apr 08 2025 - 07:35:35 EST
On Fri, Mar 21, 2025 at 07:19:03AM +0100, Christoph Hellwig wrote:
> On Tue, Mar 18, 2025 at 11:40:09AM +0100, Daniel Wagner wrote:
> > nvmet-fc: merge with f200af94ac9d ("nvmet-fc: free pending reqs on tgtport unregister")
>
> What is this supposed to mean?
This a left over from my dev work.
> > + for (;;) {
> > + lsop = list_first_entry_or_null(&tgtport->ls_req_list,
> > + struct nvmet_fc_ls_req_op,
> > + lsreq_list);
> > + if (!lsop)
> > + break;
>
> while ((lsop = list_first_entry_or_null(&tgtport->ls_req_list,
> struct nvmet_fc_ls_req_op, lsreq_list))) {
>
> > +
> > + list_del(&lsop->lsreq_list);
>
> Another case where I'd really love to help the list_pop helper Linus
> flamed me for :(
Sure, will change these for(;;) loops into while() loops.
BTW, bcachefs seems to have it:
#define container_of_or_null(ptr, type, member) \
({ \
typeof(ptr) _ptr = ptr; \
_ptr ? container_of(_ptr, type, member) : NULL; \
})
static inline struct list_head *list_pop(struct list_head *head)
{
if (list_empty(head))
return NULL;
struct list_head *ret = head->next;
list_del_init(ret);
return ret;
}
#define list_pop_entry(head, type, member) \
container_of_or_null(list_pop(head), type, member)