From: "Jun'ichi Nomura" <j-nomura@ce.jp.nec.com>
To: Alasdair G Kergon <agk@redhat.com>
Cc: Mike Anderson <andmike@us.ibm.com>, Greg KH <gregkh@suse.de>,
linux-kernel@vger.kernel.org,
device-mapper development <dm-devel@redhat.com>,
Lars Marowsky-Bree <lmb@suse.de>
Subject: Re: [PATCH 2/3] sysfs representation of stacked devices (dm) (rev.2)
Date: Wed, 22 Feb 2006 14:32:42 -0500 [thread overview]
Message-ID: <43FCBC5A.3020204@ce.jp.nec.com> (raw)
In-Reply-To: <20060222181305.GD31641@agk.surrey.redhat.com>
[-- Attachment #1: Type: text/plain, Size: 519 bytes --]
Hi,
Alasdair G Kergon wrote:
> The global _hash_lock should not be held (thereby locking out most dm ioctl
> operations on any device) while the slow populate_table() runs.
>
> I'm trying out a variant of the patch that drops and reacquires that lock.
OK, thanks for the confirmation.
I guess the variant itself will need dm_get() to avoid md
being stolen. Depending on that, I might change my patch.
Attached is a revised patch based on Mike Anderson's patch.
--
Jun'ichi Nomura, NEC Solutions (America), Inc.
[-- Attachment #2: dm.patch --]
[-- Type: text/x-patch, Size: 2446 bytes --]
--- linux-2.6.15/drivers/md/dm-table.c 2006-02-22 11:25:10.000000000 -0500
+++ linux-2.6.15/drivers/md/dm-table.c 2006-02-22 11:32:54.000000000 -0500
@@ -348,7 +348,7 @@ static struct dm_dev *find_device(struct
/*
* Open a device so we can use it as a map destination.
*/
-static int open_dev(struct dm_dev *d, dev_t dev)
+static int open_dev(struct dm_dev *d, dev_t dev, struct mapped_device *md)
{
static char *_claim_ptr = "I belong to device-mapper";
struct block_device *bdev;
@@ -361,7 +361,7 @@ static int open_dev(struct dm_dev *d, de
bdev = open_by_devnum(dev, d->mode);
if (IS_ERR(bdev))
return PTR_ERR(bdev);
- r = bd_claim(bdev, _claim_ptr);
+ r = bd_claim_by_kobject(bdev, _claim_ptr, &dm_disk(md)->slave_dir);
if (r)
blkdev_put(bdev);
else
@@ -372,12 +372,12 @@ static int open_dev(struct dm_dev *d, de
/*
* Close a device that we've been using.
*/
-static void close_dev(struct dm_dev *d)
+static void close_dev(struct dm_dev *d, struct mapped_device *md)
{
if (!d->bdev)
return;
- bd_release(d->bdev);
+ bd_release_from_kobject(d->bdev, &dm_disk(md)->slave_dir);
blkdev_put(d->bdev);
d->bdev = NULL;
}
@@ -398,7 +398,7 @@ static int check_device_area(struct dm_d
* careful to leave things as they were if we fail to reopen the
* device.
*/
-static int upgrade_mode(struct dm_dev *dd, int new_mode)
+static int upgrade_mode(struct dm_dev *dd, int new_mode, struct mapped_device *md)
{
int r;
struct dm_dev dd_copy;
@@ -408,9 +408,9 @@ static int upgrade_mode(struct dm_dev *d
dd->mode |= new_mode;
dd->bdev = NULL;
- r = open_dev(dd, dev);
+ r = open_dev(dd, dev, md);
if (!r)
- close_dev(&dd_copy);
+ close_dev(&dd_copy, md);
else
*dd = dd_copy;
@@ -453,7 +453,7 @@ static int __table_get_device(struct dm_
dd->mode = mode;
dd->bdev = NULL;
- if ((r = open_dev(dd, dev))) {
+ if ((r = open_dev(dd, dev, t->md))) {
kfree(dd);
return r;
}
@@ -464,7 +464,7 @@ static int __table_get_device(struct dm_
list_add(&dd->list, &t->devices);
} else if (dd->mode != (mode | dd->mode)) {
- r = upgrade_mode(dd, mode);
+ r = upgrade_mode(dd, mode, t->md);
if (r)
return r;
}
@@ -539,7 +539,7 @@ int dm_get_device(struct dm_target *ti,
void dm_put_device(struct dm_target *ti, struct dm_dev *dd)
{
if (atomic_dec_and_test(&dd->count)) {
- close_dev(dd);
+ close_dev(dd, ti->table->md);
list_del(&dd->list);
kfree(dd);
}
[-- Attachment #3: Type: text/plain, Size: 0 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: "Jun'ichi Nomura" <j-nomura@ce.jp.nec.com>
To: Alasdair G Kergon <agk@redhat.com>
Cc: Neil Brown <neilb@suse.de>, Lars Marowsky-Bree <lmb@suse.de>,
Greg KH <gregkh@suse.de>,
linux-kernel@vger.kernel.org,
device-mapper development <dm-devel@redhat.com>,
Mike Anderson <andmike@us.ibm.com>
Subject: Re: [PATCH 2/3] sysfs representation of stacked devices (dm) (rev.2)
Date: Wed, 22 Feb 2006 14:32:42 -0500 [thread overview]
Message-ID: <43FCBC5A.3020204@ce.jp.nec.com> (raw)
In-Reply-To: <20060222181305.GD31641@agk.surrey.redhat.com>
[-- Attachment #1: Type: text/plain, Size: 519 bytes --]
Hi,
Alasdair G Kergon wrote:
> The global _hash_lock should not be held (thereby locking out most dm ioctl
> operations on any device) while the slow populate_table() runs.
>
> I'm trying out a variant of the patch that drops and reacquires that lock.
OK, thanks for the confirmation.
I guess the variant itself will need dm_get() to avoid md
being stolen. Depending on that, I might change my patch.
Attached is a revised patch based on Mike Anderson's patch.
--
Jun'ichi Nomura, NEC Solutions (America), Inc.
[-- Attachment #2: dm.patch --]
[-- Type: text/x-patch, Size: 2446 bytes --]
--- linux-2.6.15/drivers/md/dm-table.c 2006-02-22 11:25:10.000000000 -0500
+++ linux-2.6.15/drivers/md/dm-table.c 2006-02-22 11:32:54.000000000 -0500
@@ -348,7 +348,7 @@ static struct dm_dev *find_device(struct
/*
* Open a device so we can use it as a map destination.
*/
-static int open_dev(struct dm_dev *d, dev_t dev)
+static int open_dev(struct dm_dev *d, dev_t dev, struct mapped_device *md)
{
static char *_claim_ptr = "I belong to device-mapper";
struct block_device *bdev;
@@ -361,7 +361,7 @@ static int open_dev(struct dm_dev *d, de
bdev = open_by_devnum(dev, d->mode);
if (IS_ERR(bdev))
return PTR_ERR(bdev);
- r = bd_claim(bdev, _claim_ptr);
+ r = bd_claim_by_kobject(bdev, _claim_ptr, &dm_disk(md)->slave_dir);
if (r)
blkdev_put(bdev);
else
@@ -372,12 +372,12 @@ static int open_dev(struct dm_dev *d, de
/*
* Close a device that we've been using.
*/
-static void close_dev(struct dm_dev *d)
+static void close_dev(struct dm_dev *d, struct mapped_device *md)
{
if (!d->bdev)
return;
- bd_release(d->bdev);
+ bd_release_from_kobject(d->bdev, &dm_disk(md)->slave_dir);
blkdev_put(d->bdev);
d->bdev = NULL;
}
@@ -398,7 +398,7 @@ static int check_device_area(struct dm_d
* careful to leave things as they were if we fail to reopen the
* device.
*/
-static int upgrade_mode(struct dm_dev *dd, int new_mode)
+static int upgrade_mode(struct dm_dev *dd, int new_mode, struct mapped_device *md)
{
int r;
struct dm_dev dd_copy;
@@ -408,9 +408,9 @@ static int upgrade_mode(struct dm_dev *d
dd->mode |= new_mode;
dd->bdev = NULL;
- r = open_dev(dd, dev);
+ r = open_dev(dd, dev, md);
if (!r)
- close_dev(&dd_copy);
+ close_dev(&dd_copy, md);
else
*dd = dd_copy;
@@ -453,7 +453,7 @@ static int __table_get_device(struct dm_
dd->mode = mode;
dd->bdev = NULL;
- if ((r = open_dev(dd, dev))) {
+ if ((r = open_dev(dd, dev, t->md))) {
kfree(dd);
return r;
}
@@ -464,7 +464,7 @@ static int __table_get_device(struct dm_
list_add(&dd->list, &t->devices);
} else if (dd->mode != (mode | dd->mode)) {
- r = upgrade_mode(dd, mode);
+ r = upgrade_mode(dd, mode, t->md);
if (r)
return r;
}
@@ -539,7 +539,7 @@ int dm_get_device(struct dm_target *ti,
void dm_put_device(struct dm_target *ti, struct dm_dev *dd)
{
if (atomic_dec_and_test(&dd->count)) {
- close_dev(dd);
+ close_dev(dd, ti->table->md);
list_del(&dd->list);
kfree(dd);
}
next prev parent reply other threads:[~2006-02-22 19:32 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-22 16:06 [PATCH 0/3] sysfs representation of stacked devices (dm/md) (rev.2) Jun'ichi Nomura
2006-02-22 16:06 ` Jun'ichi Nomura
2006-02-22 16:13 ` [PATCH 1/3] sysfs representation of stacked devices (common) (rev.2) Jun'ichi Nomura
2006-02-22 16:13 ` Jun'ichi Nomura
2006-02-22 18:48 ` Greg KH
2006-02-22 18:48 ` Greg KH
2006-02-22 22:22 ` Jun'ichi Nomura
2006-02-22 22:22 ` Jun'ichi Nomura
2006-02-22 22:28 ` Greg KH
2006-02-22 22:28 ` Greg KH
2006-02-23 19:15 ` Jun'ichi Nomura
2006-02-23 19:15 ` Jun'ichi Nomura
2006-02-24 3:40 ` Greg KH
2006-02-24 3:40 ` Greg KH
2006-02-27 16:09 ` Jun'ichi Nomura
2006-02-22 16:13 ` [PATCH 2/3] sysfs representation of stacked devices (dm) (rev.2) Jun'ichi Nomura
2006-02-22 16:13 ` Jun'ichi Nomura
2006-02-22 16:34 ` Alasdair G Kergon
2006-02-22 16:34 ` Alasdair G Kergon
2006-02-22 17:13 ` Jun'ichi Nomura
2006-02-22 17:13 ` Jun'ichi Nomura
2006-02-22 18:13 ` Alasdair G Kergon
2006-02-22 18:13 ` Alasdair G Kergon
2006-02-22 19:32 ` Jun'ichi Nomura [this message]
2006-02-22 19:32 ` Jun'ichi Nomura
2006-02-22 16:13 ` [PATCH 3/3] sysfs representation of stacked devices (md) (rev.2) Jun'ichi Nomura
2006-02-22 16:13 ` Jun'ichi Nomura
2006-02-22 18:47 ` [PATCH 0/3] sysfs representation of stacked devices (dm/md) (rev.2) Greg KH
2006-02-22 18:47 ` Greg KH
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=43FCBC5A.3020204@ce.jp.nec.com \
--to=j-nomura@ce.jp.nec.com \
--cc=agk@redhat.com \
--cc=andmike@us.ibm.com \
--cc=dm-devel@redhat.com \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=lmb@suse.de \
/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.