All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] rbd: a few small issues
@ 2013-04-30 12:22 Alex Elder
  2013-04-30 12:23 ` [PATCH 1/3] rbd: fix up the layering warning message Alex Elder
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Alex Elder @ 2013-04-30 12:22 UTC (permalink / raw)
  To: ceph-devel

This series has two patches that fix two annoyances
and a third that makes snapshot names be treated
consistently as constant data.

					-Alex

[PATCH 1/3] rbd: fix up the layering warning message
[PATCH 2/3] rbd: don't revalidate so much
[PATCH 3/3] rbd: snap names are pointer to constant data

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] rbd: fix up the layering warning message
  2013-04-30 12:22 [PATCH 0/3] rbd: a few small issues Alex Elder
@ 2013-04-30 12:23 ` Alex Elder
  2013-04-30 12:23 ` [PATCH 2/3] rbd: don't revalidate so much Alex Elder
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Alex Elder @ 2013-04-30 12:23 UTC (permalink / raw)
  To: ceph-devel

A warning gets spewed for any image being probed, including parent
images.  Set up a condition such that the warning message only gets
printed for the image being mapped, not any of its parents.

Also, I didn't like the way the warning ended up being so long.
Make it a terse warning instead.  People experimenting with layering
will know what the message means.

This is part of:
    http://tracker.ceph.com/issues/4867

Signed-off-by: Alex Elder <elder@inktank.com>
---
 drivers/block/rbd.c |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 8b30d83..176a3d7 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -4624,8 +4624,15 @@ static int rbd_dev_v2_probe(struct rbd_device
*rbd_dev)
 		ret = rbd_dev_v2_parent_info(rbd_dev);
 		if (ret)
 			goto out_err;
-		rbd_warn(rbd_dev, "WARNING: kernel support for "
-					"layered rbd images is EXPERIMENTAL!");
+
+		/*
+		 * Don't print a warning for parent images.  We can
+		 * tell this point because we won't know its pool
+		 * name yet (just its pool id).
+		 */
+		if (rbd_dev->spec->pool_name)
+			rbd_warn(rbd_dev, "WARNING: kernel layering "
+					"is EXPERIMENTAL!");
 	}

 	/* If the image supports fancy striping, get its parameters */
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] rbd: don't revalidate so much
  2013-04-30 12:22 [PATCH 0/3] rbd: a few small issues Alex Elder
  2013-04-30 12:23 ` [PATCH 1/3] rbd: fix up the layering warning message Alex Elder
@ 2013-04-30 12:23 ` Alex Elder
  2013-04-30 12:23 ` [PATCH 3/3] rbd: snap names are pointer to constant data Alex Elder
  2013-04-30 18:32 ` [PATCH 0/3] rbd: a few small issues Josh Durgin
  3 siblings, 0 replies; 5+ messages in thread
From: Alex Elder @ 2013-04-30 12:23 UTC (permalink / raw)
  To: ceph-devel

Whenever a header object event causes a mapped rbd image to refresh
its header information, revalidate_disk() is being called.  This was
done in rbd_dev_refresh() outside the control mutex in order to
avoid a lock inversion.  Although a an event like this *might*
indicate the image has changed size, most of the time it does not.

Record the image size before and after the refresh, and only
call revalidate_disk() if it changes.

This resolves:
    http://tracker.ceph.com/issues/4867

Signed-off-by: Alex Elder <elder@inktank.com>
---
 drivers/block/rbd.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 176a3d7..dbc61e3 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -3065,19 +3065,22 @@ static int rbd_dev_v1_refresh(struct rbd_device
*rbd_dev, u64 *hver)

 static int rbd_dev_refresh(struct rbd_device *rbd_dev, u64 *hver)
 {
+	u64 image_size;
 	int ret;

 	rbd_assert(rbd_image_format_valid(rbd_dev->image_format));
+	image_size = rbd_dev->header.image_size;
 	mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
 	if (rbd_dev->image_format == 1)
 		ret = rbd_dev_v1_refresh(rbd_dev, hver);
 	else
 		ret = rbd_dev_v2_refresh(rbd_dev, hver);
 	mutex_unlock(&ctl_mutex);
-	revalidate_disk(rbd_dev->disk);
 	if (ret)
 		rbd_warn(rbd_dev, "got notification but failed to "
 			   " update snaps: %d\n", ret);
+	if (image_size != rbd_dev->header.image_size)
+		revalidate_disk(rbd_dev->disk);

 	return ret;
 }
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] rbd: snap names are pointer to constant data
  2013-04-30 12:22 [PATCH 0/3] rbd: a few small issues Alex Elder
  2013-04-30 12:23 ` [PATCH 1/3] rbd: fix up the layering warning message Alex Elder
  2013-04-30 12:23 ` [PATCH 2/3] rbd: don't revalidate so much Alex Elder
@ 2013-04-30 12:23 ` Alex Elder
  2013-04-30 18:32 ` [PATCH 0/3] rbd: a few small issues Josh Durgin
  3 siblings, 0 replies; 5+ messages in thread
From: Alex Elder @ 2013-04-30 12:23 UTC (permalink / raw)
  To: ceph-devel

Make explicit that snapshot names don't change by making functions
return and take parameters that that point to const qualified data.

This resolves:
    http://tracker.ceph.com/issues/4857

Signed-off-by: Alex Elder <elder@inktank.com>
---
 drivers/block/rbd.c |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index dbc61e3..ab5c901 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -3435,10 +3435,10 @@ static struct rbd_snap *rbd_snap_create(struct
rbd_device *rbd_dev,
  * Returns a dynamically-allocated snapshot name if successful, or a
  * pointer-coded error otherwise.
  */
-static char *rbd_dev_v1_snap_info(struct rbd_device *rbd_dev, u32 which,
+static const char *rbd_dev_v1_snap_info(struct rbd_device *rbd_dev, u32
which,
 		u64 *snap_size, u64 *snap_features)
 {
-	char *snap_name;
+	const char *snap_name;
 	int i;

 	rbd_assert(which < rbd_dev->header.snapc->num_snaps);
@@ -3907,7 +3907,7 @@ out:
 	return ret;
 }

-static char *rbd_dev_v2_snap_name(struct rbd_device *rbd_dev, u32 which)
+static const char *rbd_dev_v2_snap_name(struct rbd_device *rbd_dev, u32
which)
 {
 	size_t size;
 	void *reply_buf;
@@ -3948,13 +3948,13 @@ out:
 	return snap_name;
 }

-static char *rbd_dev_v2_snap_info(struct rbd_device *rbd_dev, u32 which,
+static const char *rbd_dev_v2_snap_info(struct rbd_device *rbd_dev, u32
which,
 		u64 *snap_size, u64 *snap_features)
 {
 	u64 snap_id;
 	u64 size;
 	u64 features;
-	char *snap_name;
+	const char *snap_name;
 	int ret;

 	rbd_assert(which < rbd_dev->header.snapc->num_snaps);
@@ -3978,7 +3978,7 @@ out_err:
 	return ERR_PTR(ret);
 }

-static char *rbd_dev_snap_info(struct rbd_device *rbd_dev, u32 which,
+static const char *rbd_dev_snap_info(struct rbd_device *rbd_dev, u32 which,
 		u64 *snap_size, u64 *snap_features)
 {
 	if (rbd_dev->image_format == 1)
@@ -4045,7 +4045,7 @@ static int rbd_dev_snaps_update(struct rbd_device
*rbd_dev)
 	while (index < snap_count || links != head) {
 		u64 snap_id;
 		struct rbd_snap *snap;
-		char *snap_name;
+		const char *snap_name;
 		u64 snap_size = 0;
 		u64 snap_features = 0;

-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] rbd: a few small issues
  2013-04-30 12:22 [PATCH 0/3] rbd: a few small issues Alex Elder
                   ` (2 preceding siblings ...)
  2013-04-30 12:23 ` [PATCH 3/3] rbd: snap names are pointer to constant data Alex Elder
@ 2013-04-30 18:32 ` Josh Durgin
  3 siblings, 0 replies; 5+ messages in thread
From: Josh Durgin @ 2013-04-30 18:32 UTC (permalink / raw)
  To: Alex Elder; +Cc: ceph-devel

On 04/30/2013 05:22 AM, Alex Elder wrote:
> This series has two patches that fix two annoyances
> and a third that makes snapshot names be treated
> consistently as constant data.
>
> 					-Alex
>
> [PATCH 1/3] rbd: fix up the layering warning message
> [PATCH 2/3] rbd: don't revalidate so much
> [PATCH 3/3] rbd: snap names are pointer to constant data

These all look good.

Reviewed-by: Josh Durgin <josh.durgin@inktank.com>


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-04-30 18:33 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-30 12:22 [PATCH 0/3] rbd: a few small issues Alex Elder
2013-04-30 12:23 ` [PATCH 1/3] rbd: fix up the layering warning message Alex Elder
2013-04-30 12:23 ` [PATCH 2/3] rbd: don't revalidate so much Alex Elder
2013-04-30 12:23 ` [PATCH 3/3] rbd: snap names are pointer to constant data Alex Elder
2013-04-30 18:32 ` [PATCH 0/3] rbd: a few small issues Josh Durgin

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.