|
@@ -225,13 +225,15 @@ void ib_umem_release(struct ib_umem *umem)
|
|
|
* up here and not be able to take the mmap_sem. In that case
|
|
|
* we defer the vm_locked accounting to the system workqueue.
|
|
|
*/
|
|
|
- if (context->closing && !down_write_trylock(&mm->mmap_sem)) {
|
|
|
- INIT_WORK(&umem->work, ib_umem_account);
|
|
|
- umem->mm = mm;
|
|
|
- umem->diff = diff;
|
|
|
-
|
|
|
- schedule_work(&umem->work);
|
|
|
- return;
|
|
|
+ if (context->closing) {
|
|
|
+ if (!down_write_trylock(&mm->mmap_sem)) {
|
|
|
+ INIT_WORK(&umem->work, ib_umem_account);
|
|
|
+ umem->mm = mm;
|
|
|
+ umem->diff = diff;
|
|
|
+
|
|
|
+ schedule_work(&umem->work);
|
|
|
+ return;
|
|
|
+ }
|
|
|
} else
|
|
|
down_write(&mm->mmap_sem);
|
|
|
|