The recent landed for bio integrity broke building osd-ldisk for
both Ubuntu 18 and RHEL alt kernels. The reason is struct bio no
longer contains a struct block_devices. Instead we can get the
block device from the osd_device instead.
Change-Id: Ic72db4b29f7d0d1921fd97cb5df5c6c77908c92d
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-on: https://review.whamcloud.com/33624
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
Reviewed-by: Li Xi <lixi@ddn.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
-static int osd_bio_integrity_compare(struct bio *bio, struct osd_iobuf *iobuf,
- int index)
+static int osd_bio_integrity_compare(struct bio *bio, struct block_device *bdev,
+ struct osd_iobuf *iobuf, int index)
- struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
+ struct blk_integrity *bi = bdev_get_integrity(bdev);
struct bio_integrity_payload *bip = bio->bi_integrity;
struct niobuf_local *lnb;
unsigned short sector_size = blk_integrity_interval(bi);
struct bio_integrity_payload *bip = bio->bi_integrity;
struct niobuf_local *lnb;
unsigned short sector_size = blk_integrity_interval(bi);
int start_page_idx, bool fault_inject,
bool integrity_enabled)
{
int start_page_idx, bool fault_inject,
bool integrity_enabled)
{
+ struct super_block *sb = osd_sb(osd);
int rc;
#ifdef HAVE_BIO_INTEGRITY_PREP_FN
integrity_gen_fn *generate_fn = NULL;
int rc;
#ifdef HAVE_BIO_INTEGRITY_PREP_FN
integrity_gen_fn *generate_fn = NULL;
/* Verify and inject fault only when writing */
if (iobuf->dr_rw == 1) {
if (unlikely(OBD_FAIL_CHECK(OBD_FAIL_OST_INTEGRITY_CMP))) {
/* Verify and inject fault only when writing */
if (iobuf->dr_rw == 1) {
if (unlikely(OBD_FAIL_CHECK(OBD_FAIL_OST_INTEGRITY_CMP))) {
- rc = osd_bio_integrity_compare(bio, iobuf,
+ rc = osd_bio_integrity_compare(bio, sb->s_bdev, iobuf,
start_page_idx);
if (rc)
RETURN(rc);
start_page_idx);
if (rc)
RETURN(rc);