Commit aafb230e authored by Alex Elder's avatar Alex Elder

rbd: define rbd_assert()

Define rbd_assert() and use it in place of various BUG_ON() calls
now present in the code.  By default assertion checking is enabled;
we want to do this differently at some point.
Signed-off-by: default avatarAlex Elder <elder@inktank.com>
Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
parent 65ccfe21
...@@ -41,6 +41,8 @@ ...@@ -41,6 +41,8 @@
#include "rbd_types.h" #include "rbd_types.h"
#define RBD_DEBUG /* Activate rbd_assert() calls */
/* /*
* The basic unit of block I/O is a sector. It is interpreted in a * The basic unit of block I/O is a sector. It is interpreted in a
* number of contexts in Linux (blk, bio, genhd), but the default is * number of contexts in Linux (blk, bio, genhd), but the default is
...@@ -232,6 +234,18 @@ static struct device rbd_root_dev = { ...@@ -232,6 +234,18 @@ static struct device rbd_root_dev = {
.release = rbd_root_dev_release, .release = rbd_root_dev_release,
}; };
#ifdef RBD_DEBUG
#define rbd_assert(expr) \
if (unlikely(!(expr))) { \
printk(KERN_ERR "\nAssertion failure in %s() " \
"at line %d:\n\n" \
"\trbd_assert(%s);\n\n", \
__func__, __LINE__, #expr); \
BUG(); \
}
#else /* !RBD_DEBUG */
# define rbd_assert(expr) ((void) 0)
#endif /* !RBD_DEBUG */
static struct device *rbd_get_dev(struct rbd_device *rbd_dev) static struct device *rbd_get_dev(struct rbd_device *rbd_dev)
{ {
...@@ -406,7 +420,8 @@ static int parse_rbd_opts_token(char *c, void *private) ...@@ -406,7 +420,8 @@ static int parse_rbd_opts_token(char *c, void *private)
rbd_opts->read_only = false; rbd_opts->read_only = false;
break; break;
default: default:
BUG_ON(token); rbd_assert(false);
break;
} }
return 0; return 0;
} }
...@@ -705,7 +720,7 @@ static u64 rbd_segment_length(struct rbd_device *rbd_dev, ...@@ -705,7 +720,7 @@ static u64 rbd_segment_length(struct rbd_device *rbd_dev,
offset &= segment_size - 1; offset &= segment_size - 1;
BUG_ON(length > U64_MAX - offset); rbd_assert(length <= U64_MAX - offset);
if (offset + length > segment_size) if (offset + length > segment_size)
length = segment_size - offset; length = segment_size - offset;
...@@ -842,7 +857,7 @@ static struct bio *bio_chain_clone(struct bio **old, struct bio **next, ...@@ -842,7 +857,7 @@ static struct bio *bio_chain_clone(struct bio **old, struct bio **next,
total += tmp->bi_size; total += tmp->bi_size;
} }
BUG_ON(total < len); rbd_assert(total == len);
*old = old_chain; *old = old_chain;
...@@ -1101,7 +1116,7 @@ static int rbd_req_sync_op(struct rbd_device *rbd_dev, ...@@ -1101,7 +1116,7 @@ static int rbd_req_sync_op(struct rbd_device *rbd_dev,
struct page **pages; struct page **pages;
int num_pages; int num_pages;
BUG_ON(ops == NULL); rbd_assert(ops != NULL);
num_pages = calc_pages_for(ofs , len); num_pages = calc_pages_for(ofs , len);
pages = ceph_alloc_page_vector(num_pages, GFP_KERNEL); pages = ceph_alloc_page_vector(num_pages, GFP_KERNEL);
...@@ -1163,7 +1178,7 @@ static int rbd_do_op(struct request *rq, ...@@ -1163,7 +1178,7 @@ static int rbd_do_op(struct request *rq,
/* we've taken care of segment sizes earlier when we /* we've taken care of segment sizes earlier when we
cloned the bios. We should never have a segment cloned the bios. We should never have a segment
truncated at this point */ truncated at this point */
BUG_ON(seg_len < len); rbd_assert(seg_len == len);
ret = rbd_do_request(rq, rbd_dev, snapc, snapid, ret = rbd_do_request(rq, rbd_dev, snapc, snapid,
seg_name, seg_ofs, seg_len, seg_name, seg_ofs, seg_len,
...@@ -2186,7 +2201,7 @@ static int __rbd_init_snaps_header(struct rbd_device *rbd_dev) ...@@ -2186,7 +2201,7 @@ static int __rbd_init_snaps_header(struct rbd_device *rbd_dev)
: CEPH_NOSNAP; : CEPH_NOSNAP;
snap = links != head ? list_entry(links, struct rbd_snap, node) snap = links != head ? list_entry(links, struct rbd_snap, node)
: NULL; : NULL;
BUG_ON(snap && snap->id == CEPH_NOSNAP); rbd_assert(!snap || snap->id != CEPH_NOSNAP);
if (snap_id == CEPH_NOSNAP || (snap && snap->id > snap_id)) { if (snap_id == CEPH_NOSNAP || (snap && snap->id > snap_id)) {
struct list_head *next = links->next; struct list_head *next = links->next;
...@@ -2222,8 +2237,9 @@ static int __rbd_init_snaps_header(struct rbd_device *rbd_dev) ...@@ -2222,8 +2237,9 @@ static int __rbd_init_snaps_header(struct rbd_device *rbd_dev)
} else { } else {
/* Already have this one */ /* Already have this one */
BUG_ON(snap->size != rbd_dev->header.snap_sizes[index]); rbd_assert(snap->size ==
BUG_ON(strcmp(snap->name, snap_name)); rbd_dev->header.snap_sizes[index]);
rbd_assert(!strcmp(snap->name, snap_name));
/* Done with this list entry; advance */ /* Done with this list entry; advance */
...@@ -2313,7 +2329,7 @@ static void rbd_id_put(struct rbd_device *rbd_dev) ...@@ -2313,7 +2329,7 @@ static void rbd_id_put(struct rbd_device *rbd_dev)
int rbd_id = rbd_dev->dev_id; int rbd_id = rbd_dev->dev_id;
int max_id; int max_id;
BUG_ON(rbd_id < 1); rbd_assert(rbd_id > 0);
spin_lock(&rbd_dev_list_lock); spin_lock(&rbd_dev_list_lock);
list_del_init(&rbd_dev->node); list_del_init(&rbd_dev->node);
...@@ -2705,6 +2721,7 @@ static ssize_t rbd_remove(struct bus_type *bus, ...@@ -2705,6 +2721,7 @@ static ssize_t rbd_remove(struct bus_type *bus,
done: done:
mutex_unlock(&ctl_mutex); mutex_unlock(&ctl_mutex);
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment