Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6d740cd5b18bc8128e70f98cfde8c74ebd21cea1
Commit:     6d740cd5b18bc8128e70f98cfde8c74ebd21cea1
Parent:     d5c1682f9f8f4aa064f81fda67ea7b91fd829512
Author:     Peter Zijlstra <[EMAIL PROTECTED]>
AuthorDate: Tue Feb 20 13:58:18 2007 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Feb 20 17:10:16 2007 -0800

    [PATCH] lockdep: annotate BLKPG_DEL_PARTITION
    
    >=============================================
    >[ INFO: possible recursive locking detected ]
    >2.6.19-1.2909.fc7 #1
    >---------------------------------------------
    >anaconda/587 is trying to acquire lock:
    > (&bdev->bd_mutex){--..}, at: [<c05fb380>] mutex_lock+0x21/0x24
    >
    >but task is already holding lock:
    > (&bdev->bd_mutex){--..}, at: [<c05fb380>] mutex_lock+0x21/0x24
    >
    >other info that might help us debug this:
    >1 lock held by anaconda/587:
    > #0:  (&bdev->bd_mutex){--..}, at: [<c05fb380>] mutex_lock+0x21/0x24
    >
    >stack backtrace:
    > [<c0405812>] show_trace_log_lvl+0x1a/0x2f
    > [<c0405db2>] show_trace+0x12/0x14
    > [<c0405e36>] dump_stack+0x16/0x18
    > [<c043bd84>] __lock_acquire+0x116/0xa09
    > [<c043c960>] lock_acquire+0x56/0x6f
    > [<c05fb1fa>] __mutex_lock_slowpath+0xe5/0x24a
    > [<c05fb380>] mutex_lock+0x21/0x24
    > [<c04d82fb>] blkdev_ioctl+0x600/0x76d
    > [<c04946b1>] block_ioctl+0x1b/0x1f
    > [<c047ed5a>] do_ioctl+0x22/0x68
    > [<c047eff2>] vfs_ioctl+0x252/0x265
    > [<c047f04e>] sys_ioctl+0x49/0x63
    > [<c0404070>] syscall_call+0x7/0xb
    
    Annotate BLKPG_DEL_PARTITION's bd_mutex locking and add a little comment
    clarifying the bd_mutex locking, because I confused myself and initially
    thought the lock order was wrong too.
    
    Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]>
    Cc: Neil Brown <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 block/ioctl.c  |    2 +-
 fs/block_dev.c |    7 +++++++
 2 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/block/ioctl.c b/block/ioctl.c
index e3f5eb9..e06dbe9 100644
--- a/block/ioctl.c
+++ b/block/ioctl.c
@@ -82,7 +82,7 @@ static int blkpg_ioctl(struct block_device *bdev, struct 
blkpg_ioctl_arg __user
                        fsync_bdev(bdevp);
                        invalidate_bdev(bdevp, 0);
 
-                       mutex_lock(&bdev->bd_mutex);
+                       mutex_lock_nested(&bdev->bd_mutex, 1);
                        delete_partition(disk, part);
                        mutex_unlock(&bdev->bd_mutex);
                        mutex_unlock(&bdevp->bd_mutex);
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 0c59b70..575076c 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1101,6 +1101,13 @@ static int __blkdev_get(struct block_device *bdev, 
mode_t mode, unsigned flags,
                        int for_part);
 static int __blkdev_put(struct block_device *bdev, int for_part);
 
+/*
+ * bd_mutex locking:
+ *
+ *  mutex_lock(part->bd_mutex)
+ *    mutex_lock_nested(whole->bd_mutex, 1)
+ */
+
 static int do_open(struct block_device *bdev, struct file *file, int for_part)
 {
        struct module *owner = NULL;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to