@@ -134,8 +134,7 @@ int bio_integrity_add_page(struct bio *bio, struct page *page,
134
134
return 0 ;
135
135
}
136
136
137
- iv = bip_vec_idx (bip , bip -> bip_vcnt );
138
- BUG_ON (iv == NULL );
137
+ iv = bip -> bip_vec + bip -> bip_vcnt ;
139
138
140
139
iv -> bv_page = page ;
141
140
iv -> bv_len = len ;
@@ -203,6 +202,12 @@ static inline unsigned int bio_integrity_hw_sectors(struct blk_integrity *bi,
203
202
return sectors ;
204
203
}
205
204
205
+ static inline unsigned int bio_integrity_bytes (struct blk_integrity * bi ,
206
+ unsigned int sectors )
207
+ {
208
+ return bio_integrity_hw_sectors (bi , sectors ) * bi -> tuple_size ;
209
+ }
210
+
206
211
/**
207
212
* bio_integrity_tag_size - Retrieve integrity tag space
208
213
* @bio: bio to inspect
@@ -235,9 +240,9 @@ int bio_integrity_tag(struct bio *bio, void *tag_buf, unsigned int len, int set)
235
240
nr_sectors = bio_integrity_hw_sectors (bi ,
236
241
DIV_ROUND_UP (len , bi -> tag_size ));
237
242
238
- if (nr_sectors * bi -> tuple_size > bip -> bip_size ) {
239
- printk (KERN_ERR "%s: tag too big for bio: %u > %u\n" ,
240
- __func__ , nr_sectors * bi -> tuple_size , bip -> bip_size );
243
+ if (nr_sectors * bi -> tuple_size > bip -> bip_iter . bi_size ) {
244
+ printk (KERN_ERR "%s: tag too big for bio: %u > %u\n" , __func__ ,
245
+ nr_sectors * bi -> tuple_size , bip -> bip_iter . bi_size );
241
246
return -1 ;
242
247
}
243
248
@@ -322,7 +327,7 @@ static void bio_integrity_generate(struct bio *bio)
322
327
sector += sectors ;
323
328
prot_buf += sectors * bi -> tuple_size ;
324
329
total += sectors * bi -> tuple_size ;
325
- BUG_ON (total > bio -> bi_integrity -> bip_size );
330
+ BUG_ON (total > bio -> bi_integrity -> bip_iter . bi_size );
326
331
327
332
kunmap_atomic (kaddr );
328
333
}
@@ -387,8 +392,8 @@ int bio_integrity_prep(struct bio *bio)
387
392
388
393
bip -> bip_owns_buf = 1 ;
389
394
bip -> bip_buf = buf ;
390
- bip -> bip_size = len ;
391
- bip -> bip_sector = bio -> bi_iter .bi_sector ;
395
+ bip -> bip_iter . bi_size = len ;
396
+ bip -> bip_iter . bi_sector = bio -> bi_iter .bi_sector ;
392
397
393
398
/* Map it */
394
399
offset = offset_in_page (buf );
@@ -444,7 +449,7 @@ static int bio_integrity_verify(struct bio *bio)
444
449
struct blk_integrity_exchg bix ;
445
450
struct bio_vec bv ;
446
451
struct bvec_iter iter ;
447
- sector_t sector = bio -> bi_integrity -> bip_sector ;
452
+ sector_t sector = bio -> bi_integrity -> bip_iter . bi_sector ;
448
453
unsigned int sectors , total , ret ;
449
454
void * prot_buf = bio -> bi_integrity -> bip_buf ;
450
455
@@ -470,7 +475,7 @@ static int bio_integrity_verify(struct bio *bio)
470
475
sector += sectors ;
471
476
prot_buf += sectors * bi -> tuple_size ;
472
477
total += sectors * bi -> tuple_size ;
473
- BUG_ON (total > bio -> bi_integrity -> bip_size );
478
+ BUG_ON (total > bio -> bi_integrity -> bip_iter . bi_size );
474
479
475
480
kunmap_atomic (kaddr );
476
481
}
@@ -534,56 +539,6 @@ void bio_integrity_endio(struct bio *bio, int error)
534
539
}
535
540
EXPORT_SYMBOL (bio_integrity_endio );
536
541
537
- /**
538
- * bio_integrity_mark_head - Advance bip_vec skip bytes
539
- * @bip: Integrity vector to advance
540
- * @skip: Number of bytes to advance it
541
- */
542
- void bio_integrity_mark_head (struct bio_integrity_payload * bip ,
543
- unsigned int skip )
544
- {
545
- struct bio_vec * iv ;
546
- unsigned int i ;
547
-
548
- bip_for_each_vec (iv , bip , i ) {
549
- if (skip == 0 ) {
550
- bip -> bip_idx = i ;
551
- return ;
552
- } else if (skip >= iv -> bv_len ) {
553
- skip -= iv -> bv_len ;
554
- } else { /* skip < iv->bv_len) */
555
- iv -> bv_offset += skip ;
556
- iv -> bv_len -= skip ;
557
- bip -> bip_idx = i ;
558
- return ;
559
- }
560
- }
561
- }
562
-
563
- /**
564
- * bio_integrity_mark_tail - Truncate bip_vec to be len bytes long
565
- * @bip: Integrity vector to truncate
566
- * @len: New length of integrity vector
567
- */
568
- void bio_integrity_mark_tail (struct bio_integrity_payload * bip ,
569
- unsigned int len )
570
- {
571
- struct bio_vec * iv ;
572
- unsigned int i ;
573
-
574
- bip_for_each_vec (iv , bip , i ) {
575
- if (len == 0 ) {
576
- bip -> bip_vcnt = i ;
577
- return ;
578
- } else if (len >= iv -> bv_len ) {
579
- len -= iv -> bv_len ;
580
- } else { /* len < iv->bv_len) */
581
- iv -> bv_len = len ;
582
- len = 0 ;
583
- }
584
- }
585
- }
586
-
587
542
/**
588
543
* bio_integrity_advance - Advance integrity vector
589
544
* @bio: bio whose integrity vector to update
@@ -597,13 +552,9 @@ void bio_integrity_advance(struct bio *bio, unsigned int bytes_done)
597
552
{
598
553
struct bio_integrity_payload * bip = bio -> bi_integrity ;
599
554
struct blk_integrity * bi = bdev_get_integrity (bio -> bi_bdev );
600
- unsigned int nr_sectors ;
555
+ unsigned bytes = bio_integrity_bytes ( bi , bytes_done >> 9 ) ;
601
556
602
- BUG_ON (bip == NULL );
603
- BUG_ON (bi == NULL );
604
-
605
- nr_sectors = bio_integrity_hw_sectors (bi , bytes_done >> 9 );
606
- bio_integrity_mark_head (bip , nr_sectors * bi -> tuple_size );
557
+ bvec_iter_advance (bip -> bip_vec , & bip -> bip_iter , bytes );
607
558
}
608
559
EXPORT_SYMBOL (bio_integrity_advance );
609
560
@@ -623,16 +574,9 @@ void bio_integrity_trim(struct bio *bio, unsigned int offset,
623
574
{
624
575
struct bio_integrity_payload * bip = bio -> bi_integrity ;
625
576
struct blk_integrity * bi = bdev_get_integrity (bio -> bi_bdev );
626
- unsigned int nr_sectors ;
627
577
628
- BUG_ON (bip == NULL );
629
- BUG_ON (bi == NULL );
630
- BUG_ON (!bio_flagged (bio , BIO_CLONED ));
631
-
632
- nr_sectors = bio_integrity_hw_sectors (bi , sectors );
633
- bip -> bip_sector = bip -> bip_sector + offset ;
634
- bio_integrity_mark_head (bip , offset * bi -> tuple_size );
635
- bio_integrity_mark_tail (bip , sectors * bi -> tuple_size );
578
+ bio_integrity_advance (bio , offset << 9 );
579
+ bip -> bip_iter .bi_size = bio_integrity_bytes (bi , sectors );
636
580
}
637
581
EXPORT_SYMBOL (bio_integrity_trim );
638
582
@@ -662,8 +606,8 @@ void bio_integrity_split(struct bio *bio, struct bio_pair *bp, int sectors)
662
606
bp -> bio1 .bi_integrity = & bp -> bip1 ;
663
607
bp -> bio2 .bi_integrity = & bp -> bip2 ;
664
608
665
- bp -> iv1 = bip -> bip_vec [bip -> bip_idx ];
666
- bp -> iv2 = bip -> bip_vec [bip -> bip_idx ];
609
+ bp -> iv1 = bip -> bip_vec [bip -> bip_iter . bi_idx ];
610
+ bp -> iv2 = bip -> bip_vec [bip -> bip_iter . bi_idx ];
667
611
668
612
bp -> bip1 .bip_vec = & bp -> iv1 ;
669
613
bp -> bip2 .bip_vec = & bp -> iv2 ;
@@ -672,11 +616,12 @@ void bio_integrity_split(struct bio *bio, struct bio_pair *bp, int sectors)
672
616
bp -> iv2 .bv_offset += sectors * bi -> tuple_size ;
673
617
bp -> iv2 .bv_len -= sectors * bi -> tuple_size ;
674
618
675
- bp -> bip1 .bip_sector = bio -> bi_integrity -> bip_sector ;
676
- bp -> bip2 .bip_sector = bio -> bi_integrity -> bip_sector + nr_sectors ;
619
+ bp -> bip1 .bip_iter .bi_sector = bio -> bi_integrity -> bip_iter .bi_sector ;
620
+ bp -> bip2 .bip_iter .bi_sector =
621
+ bio -> bi_integrity -> bip_iter .bi_sector + nr_sectors ;
677
622
678
623
bp -> bip1 .bip_vcnt = bp -> bip2 .bip_vcnt = 1 ;
679
- bp -> bip1 .bip_idx = bp -> bip2 .bip_idx = 0 ;
624
+ bp -> bip1 .bip_iter . bi_idx = bp -> bip2 .bip_iter . bi_idx = 0 ;
680
625
}
681
626
EXPORT_SYMBOL (bio_integrity_split );
682
627
@@ -704,9 +649,8 @@ int bio_integrity_clone(struct bio *bio, struct bio *bio_src,
704
649
memcpy (bip -> bip_vec , bip_src -> bip_vec ,
705
650
bip_src -> bip_vcnt * sizeof (struct bio_vec ));
706
651
707
- bip -> bip_sector = bip_src -> bip_sector ;
708
652
bip -> bip_vcnt = bip_src -> bip_vcnt ;
709
- bip -> bip_idx = bip_src -> bip_idx ;
653
+ bip -> bip_iter = bip_src -> bip_iter ;
710
654
711
655
return 0 ;
712
656
}
0 commit comments