From: Peter Osterlund <petero2@telia.com>
To: Laurent Riffard <laurent.riffard@free.fr>
Cc: Arjan van de Ven <arjan@linux.intel.com>,
mingo@elte.hu, akpm@osdl.org,
Kernel development list <linux-kernel@vger.kernel.org>,
axboe@suse.de
Subject: Re: [patch] lockdep: annotate pktcdvd natural device hierarchy
Date: 15 Jul 2006 12:57:38 +0200 [thread overview]
Message-ID: <m3ac7b6spp.fsf@telia.com> (raw)
In-Reply-To: <44B8C506.1000009@free.fr>
Laurent Riffard <laurent.riffard@free.fr> writes:
> Le 15.07.2006 09:04, Arjan van de Ven a écrit :
>
> Thanks Arjan, this seems to solve the initial issue of this thread,
> which was "possible circular locking deadlock detected!" while
> doing "pktsetup dvd /dev/dvd".
>
> So here is the next step :-(. I'm now running 2.6.18-rc1-mm2 and I was able
> to successfully run:
> - modprobe ptkcdvd
> - pktsetup dvd /dev/dvd
>
> Then I inserted a UDF-formatted CD-RW in the CD/DVD burner and I typed
> this command :
> - mount -oro -tauto /dev/pktcdvd/dvd /mnt/cdrom
> The following happened :
>
> pktcdvd: writer pktcdvd0 mapped to hdc
>
> =============================================
> [ INFO: possible recursive locking detected ]
> ---------------------------------------------
I got the same problem. This patch fixes it in my case. I'm not sure
if using the *_partition() functions is the right thing to do, but the
device mapper code is using those functions in similar situations.
drivers/block/pktcdvd.c | 12 ++++++------
fs/block_dev.c | 7 +++----
include/linux/fs.h | 1 +
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index f87d1a8..ccded00 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -1922,7 +1922,7 @@ static int pkt_open_dev(struct pktcdvd_d
* so bdget() can't fail.
*/
bdget(pd->bdev->bd_dev);
- if ((ret = blkdev_get(pd->bdev, FMODE_READ, O_RDONLY)))
+ if ((ret = blkdev_get_partition(pd->bdev, FMODE_READ, O_RDONLY)))
goto out;
if ((ret = bd_claim(pd->bdev, pd)))
@@ -1971,7 +1971,7 @@ static int pkt_open_dev(struct pktcdvd_d
out_unclaim:
bd_release(pd->bdev);
out_putdev:
- blkdev_put(pd->bdev);
+ blkdev_put_partition(pd->bdev);
out:
return ret;
}
@@ -1989,7 +1989,7 @@ static void pkt_release_dev(struct pktcd
pkt_set_speed(pd, MAX_SPEED, MAX_SPEED);
bd_release(pd->bdev);
- blkdev_put(pd->bdev);
+ blkdev_put_partition(pd->bdev);
pkt_shrink_pktlist(pd);
}
@@ -2339,7 +2339,7 @@ static int pkt_new_dev(struct pktcdvd_de
bdev = bdget(dev);
if (!bdev)
return -ENOMEM;
- ret = blkdev_get(bdev, FMODE_READ, O_RDONLY | O_NONBLOCK);
+ ret = blkdev_get_partition(bdev, FMODE_READ, O_RDONLY | O_NONBLOCK);
if (ret)
return ret;
@@ -2368,7 +2368,7 @@ static int pkt_new_dev(struct pktcdvd_de
return 0;
out_mem:
- blkdev_put(bdev);
+ blkdev_put_partition(bdev);
/* This is safe: open() is still holding a reference. */
module_put(THIS_MODULE);
return ret;
@@ -2530,7 +2530,7 @@ static int pkt_remove_dev(struct pkt_ctr
if (!IS_ERR(pd->cdrw.thread))
kthread_stop(pd->cdrw.thread);
- blkdev_put(pd->bdev);
+ blkdev_put_partition(pd->bdev);
remove_proc_entry(pd->name, pkt_proc);
DPRINTK("pktcdvd: writer %s unmapped\n", pd->name);
diff --git a/fs/block_dev.c b/fs/block_dev.c
index b721bb6..642e9b2 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -822,9 +822,6 @@ struct block_device *open_by_devnum(dev_
EXPORT_SYMBOL(open_by_devnum);
-static int
-blkdev_get_partition(struct block_device *bdev, mode_t mode, unsigned flags);
-
struct block_device *open_partition_by_devnum(dev_t dev, unsigned mode)
{
struct block_device *bdev = bdget(dev);
@@ -1031,7 +1028,7 @@ blkdev_get_whole(struct block_device *bd
return do_open(bdev, &fake_file, BD_MUTEX_WHOLE);
}
-static int
+int
blkdev_get_partition(struct block_device *bdev, mode_t mode, unsigned flags)
{
/*
@@ -1050,6 +1047,8 @@ blkdev_get_partition(struct block_device
return do_open(bdev, &fake_file, BD_MUTEX_PARTITION);
}
+EXPORT_SYMBOL(blkdev_get_partition);
+
static int blkdev_open(struct inode * inode, struct file * filp)
{
struct block_device *bdev;
diff --git a/include/linux/fs.h b/include/linux/fs.h
index b9f1c18..10f8c56 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1455,6 +1455,7 @@ extern int ioctl_by_bdev(struct block_de
extern int blkdev_ioctl(struct block_device *, struct file *, unsigned, unsigned long);
extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
extern int blkdev_get(struct block_device *, mode_t, unsigned);
+extern int blkdev_get_partition(struct block_device *, mode_t, unsigned);
extern int blkdev_put(struct block_device *);
extern int blkdev_put_partition(struct block_device *);
extern int bd_claim(struct block_device *, void *);
--
Peter Osterlund - petero2@telia.com
http://web.telia.com/~u89404340
next prev parent reply other threads:[~2006-07-15 10:58 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-08 19:09 2.6.17-rc6-mm1/pktcdvd - BUG: possible circular locking Laurent Riffard
2006-06-12 15:14 ` Arjan van de Ven
2006-06-12 16:41 ` Jens Axboe
2006-06-21 10:21 ` Arjan van de Ven
2006-06-22 14:50 ` Peter Osterlund
2006-06-22 18:20 ` Arjan van de Ven
2006-07-14 11:22 ` Peter Osterlund
2006-07-14 13:46 ` Arjan van de Ven
2006-07-14 21:06 ` Peter Osterlund
2006-07-14 22:29 ` Arjan van de Ven
2006-07-15 7:04 ` [patch] lockdep: annotate pktcdvd natural device hierarchy Arjan van de Ven
2006-07-15 10:35 ` Laurent Riffard
2006-07-15 10:57 ` Peter Osterlund [this message]
2006-07-16 10:33 ` Laurent Riffard
2006-07-25 2:27 ` Andrew Morton
2006-07-25 5:34 ` Arjan van de Ven
2006-07-25 6:31 ` Andrew Morton
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=m3ac7b6spp.fsf@telia.com \
--to=petero2@telia.com \
--cc=akpm@osdl.org \
--cc=arjan@linux.intel.com \
--cc=axboe@suse.de \
--cc=laurent.riffard@free.fr \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/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.