On 2022/01/15 4:58, Jan Kara wrote: >> Now that commit 322c4293ecc58110 already arrived at linux.git, we need to >> quickly send a fixup patch for these reported regressions. This "[PATCH >> v2 2/2] loop: use task_work for autoclear operation" did not address "if >> (lo->lo_state == Lo_bound) { }" part. If we address this part, something >> like below diff? > > Please no. That is too ugly to live. I'd go just with attached version of > your solution. That should fix the xfstests regression. The LTP regression > needs to be fixed in mount. Yes, this patch is ugly. Since disk->open_mutex => lo->lo_mutex dependency is recorded by lo_open()/lo_release(), and blk_mq_freeze_queue() by e.g. loop_set_status() waits for I/O completion with lo->lo_mutex held, from locking dependency chain perspective waiting for I/O completion with disk->open_mutex held still remains. Therefore, this ugly patch kills disk->open_mutex => lo->lo_mutex dependency via not holding lo->lo_mutex from lo_open()/lo_release(). Waiting for Lo_rundown device after lo_open() is a freebie till a fixed version of /bin/mount is used by many users ( https://lkml.kernel.org/r/20220113154735.hdzi4cqsz5jt6asp@xxxxxxxxxx ). >> I think lo_open() and lo_release() are doing too much things. I wish "struct block_device_operations" >> provides open() and release() callbacks without disk->open_mutex held... Christoph is not a fan of proliferating the use of task_work_add(). Can we go with exporting task_work_add() for this release cycle? Or instead can we go with providing release() callback without disk->open_mutex held ( https://lkml.kernel.org/r/08d703d1-8b32-ec9b-2b50-54b8376d3d40@xxxxxxxxxxxxxxxxxxx ) ?