The bdev->bd_disk, !bdev_get_queue and q->make_request_fn checks are all things you don't need, any blkdev_issue_flush should not either, although I'll need to look into the weird loop workaround again, which doesn't make much sense to me.
I tried to confirm q->make_request_fn and got lost, I am going to try again. Thanks, Anand