aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/rbd.c
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2012-07-25 10:32:40 -0400
committerSage Weil <sage@inktank.com>2012-07-30 21:15:48 -0400
commit8e94af8e2b582e5915abc171a28130881d1c26e4 (patch)
treeddc6135050fcb792fb4b4b45ee9aadbd050a5526 /drivers/block/rbd.c
parentaa711ee3402ad10ffd5b70ce0417fadc9a95cccf (diff)
rbd: encapsulate header validity test
If an rbd image header is read and it doesn't begin with the expected magic information, a warning is displayed. This is a fairly simple test, but it could be extended at some point. Fix the comparison so it actually looks at the "text" field rather than the front of the structure. In any case, encapsulate the validity test in its own function. Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'drivers/block/rbd.c')
-rw-r--r--drivers/block/rbd.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index bb7f436b176..ae65fac2c42 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -481,6 +481,12 @@ static void rbd_coll_release(struct kref *kref)
481 kfree(coll); 481 kfree(coll);
482} 482}
483 483
484static bool rbd_dev_ondisk_valid(struct rbd_image_header_ondisk *ondisk)
485{
486 return !memcmp(&ondisk->text,
487 RBD_HEADER_TEXT, sizeof (RBD_HEADER_TEXT));
488}
489
484/* 490/*
485 * Create a new header structure, translate header format from the on-disk 491 * Create a new header structure, translate header format from the on-disk
486 * header. 492 * header.
@@ -492,7 +498,7 @@ static int rbd_header_from_disk(struct rbd_image_header *header,
492{ 498{
493 u32 i, snap_count; 499 u32 i, snap_count;
494 500
495 if (memcmp(ondisk, RBD_HEADER_TEXT, sizeof(RBD_HEADER_TEXT))) 501 if (!rbd_dev_ondisk_valid(ondisk))
496 return -ENXIO; 502 return -ENXIO;
497 503
498 snap_count = le32_to_cpu(ondisk->snap_count); 504 snap_count = le32_to_cpu(ondisk->snap_count);