On Wed, Aug 21, 2019 at 11:57:03AM -0700, Ira Weiny wrote: > > Oh, I didn't think we were talking about that. Hanging the close of > > the datafile fd contingent on some other FD's closure is a recipe for > > deadlock.. > > The discussion between Jan and Dave was concerning what happens when a user > calls > > fd = open() > fnctl(...getlease...) > addr = mmap(fd...) > ib_reg_mr() <pin> > munmap(addr...) > close(fd) I don't see how blocking close(fd) could work. Write it like this: fd = open() uverbs = open(/dev/uverbs) fnctl(...getlease...) addr = mmap(fd...) ib_reg_mr() <pin> munmap(addr...) <sigkill> The order FD's are closed during sigkill is not deterministic, so when all the fputs happen during a kill'd exit we could end up blocking in close(fd) as close(uverbs) will come after in the close list. close(uverbs) is the thing that does the dereg_mr and releases the pin. We don't need complexity with dup to create problems. Jason