From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kara Subject: [PATCH] udf: Fix deadlock in udf_release_file() Date: Mon, 20 Feb 2012 17:54:00 +0100 Message-ID: <1329756840-20134-1-git-send-email-jack@suse.cz> Cc: Al Viro , Jan Kara To: linux-fsdevel@vger.kernel.org Return-path: Received: from cantor2.suse.de ([195.135.220.15]:49014 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752576Ab2BTQyR (ORCPT ); Mon, 20 Feb 2012 11:54:17 -0500 Sender: linux-fsdevel-owner@vger.kernel.org List-ID: udf_release_file() can be called from munmap() path with mmap_sem held. Thus we cannot take i_mutex there because that ranks above mmap_sem. Luckily, i_mutex is not needed in udf_release_file() anymore since protection by i_data_sem is enough to protect from races with write and truncate. Reported-by: Al Viro Signed-off-by: Jan Kara --- fs/udf/file.c | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-) If noone objects, I will add this patch to my tree and push it to Linus. diff --git a/fs/udf/file.c b/fs/udf/file.c index dca0c38..d567b84 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -201,12 +201,10 @@ out: static int udf_release_file(struct inode *inode, struct file *filp) { if (filp->f_mode & FMODE_WRITE) { - mutex_lock(&inode->i_mutex); down_write(&UDF_I(inode)->i_data_sem); udf_discard_prealloc(inode); udf_truncate_tail_extent(inode); up_write(&UDF_I(inode)->i_data_sem); - mutex_unlock(&inode->i_mutex); } return 0; } -- 1.7.1