* which is already holding mmap_sem for writes. If some other
* thread gets the write lock in the meantime, this thread will
* block, but at least it won't deadlock on itself. LU-1735 */
- if (down_read_trylock(&mm->mmap_sem) == 0) {
- kfree(buffer);
- return -EDEADLK;
- }
+ if (down_read_trylock(&mm->mmap_sem) == 0)
+ GOTO(out, rc = -EDEADLK);
+
up_read(&mm->mmap_sem);
addr = mm->env_start;