On Tue, Jul 14, 2015 at 08:36:19AM -0700, 'Christoph Hellwig' wrote: > Oh, I had missed that PHYS_MR might sleep. That might be the reasons > why everyone is avoiding them despite Tom preferring them over FMR. Yep, almost certainly. But even that is just a legacy of the bad API. Even Sagi's API idea can accommodate this with enough driver effort, but only if posting is combined: - alloc_mr: Just set aside any memory the driver needs for PHYS_MR - set_sg_list_and_post: + This would issue the PHYS_MR call to the NIC, but not sleep. It would adjust the SQ so that the tail pointer is blocked and the NIC doesn't see any more posts. Effectively, the SQ stalls. This way the ULP can post more stuff and ordering is preserved. + It would then setup a callback for PHYS_MR NIC completion and return, having never slept. + The callback will unblock the SQ Yes, this is complicated, but it shows how combing MR setup and post together lets us do a lot more. Sadly, we could probably never do this for older drivers due to them being unmaintained, but it is certainly possible the core could provide an older driver wrapper that emulates the above with less efficiency using threads/queues/etc. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html