Messages in this thread | | | Date | Wed, 21 Aug 2019 16:48:10 -0300 | From | Jason Gunthorpe <> | Subject | Re: [RFC PATCH v2 00/19] RDMA/FS DAX truncate proposal V1,000,002 ;-) |
| |
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
| |