From: Cyrill Gorcunov <gorcunov@gmail.com>
To: Jan Kara <jack@suse.cz>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Eric Sandeen <sandeen@sandeen.net>,
LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH] UDF: fix deadlock on inode being dropped
Date: Wed, 6 Jun 2007 21:53:51 +0400 [thread overview]
Message-ID: <20070606175351.GA8397@cvg> (raw)
This patch prevents from deadlock on inode being dropped.
The deadlock is caused by inderect call of mark_inode_dirty()
within udf_drop_inode() but inode lock is already kept
by the kernel. So moving code from udf_drop_inode() to
udf_delete_inode() we save its functionality and avoid
deadlock.
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
---
Andrew the patch is over Jan's two patches you have dropped.
AFAIS a such code moving is quite safe but I'm waiting for
Jan's comments anyway.
fs/udf/inode.c | 20 ++++++++------------
fs/udf/super.c | 1 -
2 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/fs/udf/inode.c b/fs/udf/inode.c
index 9fcd76c..ae56f25 100644
--- a/fs/udf/inode.c
+++ b/fs/udf/inode.c
@@ -83,6 +83,14 @@ static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int);
*/
void udf_delete_inode(struct inode *inode)
{
+ if (!(inode->i_sb->s_flags & MS_RDONLY)) {
+ lock_kernel();
+ /* Discard preallocation for directories, symlinks, etc. */
+ udf_discard_prealloc(inode);
+ udf_truncate_tail_extent(inode);
+ unlock_kernel();
+ }
+
truncate_inode_pages(&inode->i_data, 0);
if (is_bad_inode(inode))
@@ -102,18 +110,6 @@ no_delete:
clear_inode(inode);
}
-void udf_drop_inode(struct inode *inode)
-{
- if (!(inode->i_sb->s_flags & MS_RDONLY)) {
- lock_kernel();
- /* Discard preallocation for directories, symlinks, etc. */
- udf_discard_prealloc(inode);
- udf_truncate_tail_extent(inode);
- unlock_kernel();
- }
- generic_drop_inode(inode);
-}
-
void udf_clear_inode(struct inode *inode)
{
kfree(UDF_I_DATA(inode));
diff --git a/fs/udf/super.c b/fs/udf/super.c
index b02d2c2..deb0d29 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -166,7 +166,6 @@ static const struct super_operations udf_sb_ops = {
.write_inode = udf_write_inode,
.delete_inode = udf_delete_inode,
.clear_inode = udf_clear_inode,
- .drop_inode = udf_drop_inode,
.put_super = udf_put_super,
.write_super = udf_write_super,
.statfs = udf_statfs,
next reply other threads:[~2007-06-06 17:55 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-06 17:53 Cyrill Gorcunov [this message]
2007-06-07 9:36 ` [PATCH] UDF: fix deadlock on inode being dropped Jan Kara
2007-06-07 13:54 ` Cyrill Gorcunov
2007-06-07 14:41 ` Jan Kara
2007-06-07 14:36 ` Cyrill Gorcunov
2007-06-09 13:35 ` Cyrill Gorcunov
2007-06-11 10:15 ` Jan Kara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070606175351.GA8397@cvg \
--to=gorcunov@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=jack@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=sandeen@sandeen.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.