Whamcloud - gitweb
LU-11071 osd-ldiskfs: support bio integrity with Ubuntu 18 24/33624/3
authorJames Simmons <uja.ornl@yahoo.com>
Thu, 8 Nov 2018 18:12:06 +0000 (13:12 -0500)
committerOleg Drokin <green@whamcloud.com>
Sat, 17 Nov 2018 01:25:32 +0000 (01:25 +0000)
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>
lustre/osd-ldiskfs/osd_io.c

index 3598aef..55e238b 100644 (file)
@@ -339,10 +339,10 @@ static int bio_dif_compare(__u16 *expected_guard_buf, void *bio_prot_buf,
        return 0;
 }
 
-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);
@@ -380,6 +380,7 @@ static int osd_bio_integrity_handle(struct osd_device *osd, struct bio *bio,
                                    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;
@@ -406,7 +407,7 @@ static int osd_bio_integrity_handle(struct osd_device *osd, struct bio *bio,
        /* 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);