History

block: Deprecate the use of the term sector in the context of block integrity

The protection interval is not necessarily tied to the logical block size of a block device. Stop using the terms "sector" and "sectors". Going forward we will use the term "seed" to describe the initial reference tag value for a given I/O. "Interval" will be used to describe the portion of the data buffer that a given piece of protection information is associated with.

Martin K. Petersen committed 12 years ago

Commit 3be91c41 parent 5f9378f4 files · +52 −52Browse files

Unified · Split

4 files
  1. block/bio-integrity.c +21 −21
  2. block/blk-integrity.c +5 −5
  3. drivers/scsi/sd_dif.c +23 −23
  4. include/linux/blkdev.h +3 −3
block/bio-integrity.c+21−21
@@ -185,20 +185,20 @@ bool bio_integrity_enabled(struct bio *bio) · 184 unmodified lines
185185 EXPORT_SYMBOL(bio_integrity_enabled);
186186
187187 /**
188− * bio_integrity_hw_sectors - Convert 512b sectors to hardware ditto
188+ * bio_integrity_intervals - Return number of integrity intervals for a bio
189189 * @bi: blk_integrity profile for device
190− * @sectors: Number of 512 sectors to convert
190+ * @sectors: Size of the bio in 512-byte sectors
191191 *
192192 * Description: The block layer calculates everything in 512 byte
193− * sectors but integrity metadata is done in terms of the hardware
194− * sector size of the storage device. Convert the block layer sectors
195− * to physical sectors.
193+ * sectors but integrity metadata is done in terms of the data integrity
194+ * interval size of the storage device. Convert the block layer sectors
195+ * to the appropriate number of integrity intervals.
196196 */
197−static inline unsigned int bio_integrity_hw_sectors(struct blk_integrity *bi,
198− unsigned int sectors)
197+static inline unsigned int bio_integrity_intervals(struct blk_integrity *bi,
198+ unsigned int sectors)
199199 {
200200 /* At this point there are only 512b or 4096b DIF/EPP devices */
201− if (bi->sector_size == 4096)
201+ if (bi->interval == 4096)
202202 return sectors >>= 3;
203203
204204 return sectors;
@@ -207,7 +207,7 @@ static inline unsigned int bio_integrity_hw_sectors(struct blk_integrity *bi, · 2 unmodified lines
207207 static inline unsigned int bio_integrity_bytes(struct blk_integrity *bi,
208208 unsigned int sectors)
209209 {
210− return bio_integrity_hw_sectors(bi, sectors) * bi->tuple_size;
210+ return bio_integrity_intervals(bi, sectors) * bi->tuple_size;
211211 }
212212
213213 /**
@@ -221,25 +221,25 @@ static int bio_integrity_generate_verify(struct bio *bio, int operate) · 7 unmodified lines
221221 struct blk_integrity_exchg bix;
222222 struct bio_vec *bv;
223223 struct bio_integrity_payload *bip = bio_integrity(bio);
224− sector_t sector;
225− unsigned int sectors, ret = 0, i;
224+ sector_t seed;
225+ unsigned int intervals, ret = 0, i;
226226 void *prot_buf = page_address(bip->bip_vec->bv_page) +
227227 bip->bip_vec->bv_offset;
228228
229229 if (operate)
230− sector = bio->bi_iter.bi_sector;
230+ seed = bio->bi_iter.bi_sector;
231231 else
232− sector = bip->bip_iter.bi_sector;
232+ seed = bip->bip_iter.bi_sector;
233233
234234 bix.disk_name = bio->bi_bdev->bd_disk->disk_name;
235− bix.sector_size = bi->sector_size;
235+ bix.interval = bi->interval;
236236
237237 bio_for_each_segment_all(bv, bio, i) {
238238 void *kaddr = kmap_atomic(bv->bv_page);
239239 bix.data_buf = kaddr + bv->bv_offset;
240240 bix.data_size = bv->bv_len;
241241 bix.prot_buf = prot_buf;
242− bix.sector = sector;
242+ bix.seed = seed;
243243
244244 if (operate)
245245 bi->generate_fn(&bix);
@@ -251,9 +251,9 @@ static int bio_integrity_generate_verify(struct bio *bio, int operate) · 5 unmodified lines
251251 }
252252 }
253253
254− sectors = bv->bv_len / bi->sector_size;
255− sector += sectors;
256− prot_buf += sectors * bi->tuple_size;
254+ intervals = bv->bv_len / bi->interval;
255+ seed += intervals;
256+ prot_buf += intervals * bi->tuple_size;
257257
258258 kunmap_atomic(kaddr);
259259 }
@@ -294,17 +294,17 @@ int bio_integrity_prep(struct bio *bio) · 34 unmodified lines
294294 unsigned long start, end;
295295 unsigned int len, nr_pages;
296296 unsigned int bytes, offset, i;
297− unsigned int sectors;
297+ unsigned int intervals;
298298
299299 bi = bdev_get_integrity(bio->bi_bdev);
300300 q = bdev_get_queue(bio->bi_bdev);
301301 BUG_ON(bi == NULL);
302302 BUG_ON(bio_integrity(bio));
303303
304− sectors = bio_integrity_hw_sectors(bi, bio_sectors(bio));
304+ intervals = bio_integrity_intervals(bi, bio_sectors(bio));
305305
306306 /* Allocate kernel buffer for protection data */
307− len = sectors * bi->tuple_size;
307+ len = intervals * bi->tuple_size;
308308 buf = kmalloc(len, GFP_NOIO | q->bounce_gfp);
309309 if (unlikely(buf == NULL)) {
310310 printk(KERN_ERR "could not allocate integrity buffer\n");
block/blk-integrity.c+5−5
@@ -154,10 +154,10 @@ int blk_integrity_compare(struct gendisk *gd1, struct gendisk *gd2) · 153 unmodified lines
154154 if (!b1 || !b2)
155155 return -1;
156156
157− if (b1->sector_size != b2->sector_size) {
158− printk(KERN_ERR "%s: %s/%s sector sz %u != %u\n", __func__,
159− gd1->disk_name, gd2->disk_name,
160− b1->sector_size, b2->sector_size);
157+ if (b1->interval != b2->interval) {
158+ pr_err("%s: %s/%s protection interval %u != %u\n",
159+ __func__, gd1->disk_name, gd2->disk_name,
160+ b1->interval, b2->interval);
161161 return -1;
162162 }
163163
@@ -407,7 +407,7 @@ int blk_integrity_register(struct gendisk *disk, struct blk_integrity *template) · 243 unmodified lines
407407 kobject_uevent(&bi->kobj, KOBJ_ADD);
408408
409409 bi->flags |= INTEGRITY_FLAG_READ | INTEGRITY_FLAG_WRITE;
410− bi->sector_size = queue_logical_block_size(disk->queue);
410+ bi->interval = queue_logical_block_size(disk->queue);
411411 disk->integrity = bi;
412412 } else
413413 bi = disk->integrity;
drivers/scsi/sd_dif.c+23−23
@@ -57,16 +57,16 @@ static void sd_dif_type1_generate(struct blk_integrity_exchg *bix, csum_fn *fn) · 56 unmodified lines
5757 {
5858 void *buf = bix->data_buf;
5959 struct sd_dif_tuple *sdt = bix->prot_buf;
60− sector_t sector = bix->sector;
60+ sector_t seed = bix->seed;
6161 unsigned int i;
6262
63− for (i = 0 ; i < bix->data_size ; i += bix->sector_size, sdt++) {
64− sdt->guard_tag = fn(buf, bix->sector_size);
65− sdt->ref_tag = cpu_to_be32(sector & 0xffffffff);
63+ for (i = 0 ; i < bix->data_size ; i += bix->interval, sdt++) {
64+ sdt->guard_tag = fn(buf, bix->interval);
65+ sdt->ref_tag = cpu_to_be32(seed & 0xffffffff);
6666 sdt->app_tag = 0;
6767
68− buf += bix->sector_size;
69− sector++;
68+ buf += bix->interval;
69+ seed++;
7070 }
7171 }
7272
@@ -84,35 +84,35 @@ static int sd_dif_type1_verify(struct blk_integrity_exchg *bix, csum_fn *fn) · 11 unmodified lines
8484 {
8585 void *buf = bix->data_buf;
8686 struct sd_dif_tuple *sdt = bix->prot_buf;
87− sector_t sector = bix->sector;
87+ sector_t seed = bix->seed;
8888 unsigned int i;
8989 __u16 csum;
9090
91− for (i = 0 ; i < bix->data_size ; i += bix->sector_size, sdt++) {
91+ for (i = 0 ; i < bix->data_size ; i += bix->interval, sdt++) {
9292 /* Unwritten sectors */
9393 if (sdt->app_tag == 0xffff)
9494 return 0;
9595
96− if (be32_to_cpu(sdt->ref_tag) != (sector & 0xffffffff)) {
96+ if (be32_to_cpu(sdt->ref_tag) != (seed & 0xffffffff)) {
9797 printk(KERN_ERR
9898 "%s: ref tag error on sector %lu (rcvd %u)\n",
99− bix->disk_name, (unsigned long)sector,
99+ bix->disk_name, (unsigned long)seed,
100100 be32_to_cpu(sdt->ref_tag));
101101 return -EIO;
102102 }
103103
104− csum = fn(buf, bix->sector_size);
104+ csum = fn(buf, bix->interval);
105105
106106 if (sdt->guard_tag != csum) {
107107 printk(KERN_ERR "%s: guard tag error on sector %lu " \
108108 "(rcvd %04x, data %04x)\n", bix->disk_name,
109− (unsigned long)sector,
109+ (unsigned long)seed,
110110 be16_to_cpu(sdt->guard_tag), be16_to_cpu(csum));
111111 return -EIO;
112112 }
113113
114− buf += bix->sector_size;
115− sector++;
114+ buf += bix->interval;
115+ seed++;
116116 }
117117
118118 return 0;
@@ -155,12 +155,12 @@ static void sd_dif_type3_generate(struct blk_integrity_exchg *bix, csum_fn *fn) · 36 unmodified lines
155155 struct sd_dif_tuple *sdt = bix->prot_buf;
156156 unsigned int i;
157157
158− for (i = 0 ; i < bix->data_size ; i += bix->sector_size, sdt++) {
159− sdt->guard_tag = fn(buf, bix->sector_size);
158+ for (i = 0 ; i < bix->data_size ; i += bix->interval, sdt++) {
159+ sdt->guard_tag = fn(buf, bix->interval);
160160 sdt->ref_tag = 0;
161161 sdt->app_tag = 0;
162162
163− buf += bix->sector_size;
163+ buf += bix->interval;
164164 }
165165 }
166166
@@ -178,27 +178,27 @@ static int sd_dif_type3_verify(struct blk_integrity_exchg *bix, csum_fn *fn) · 11 unmodified lines
178178 {
179179 void *buf = bix->data_buf;
180180 struct sd_dif_tuple *sdt = bix->prot_buf;
181− sector_t sector = bix->sector;
181+ sector_t seed = bix->seed;
182182 unsigned int i;
183183 __u16 csum;
184184
185− for (i = 0 ; i < bix->data_size ; i += bix->sector_size, sdt++) {
185+ for (i = 0 ; i < bix->data_size ; i += bix->interval, sdt++) {
186186 /* Unwritten sectors */
187187 if (sdt->app_tag == 0xffff && sdt->ref_tag == 0xffffffff)
188188 return 0;
189189
190− csum = fn(buf, bix->sector_size);
190+ csum = fn(buf, bix->interval);
191191
192192 if (sdt->guard_tag != csum) {
193193 printk(KERN_ERR "%s: guard tag error on sector %lu " \
194194 "(rcvd %04x, data %04x)\n", bix->disk_name,
195− (unsigned long)sector,
195+ (unsigned long)seed,
196196 be16_to_cpu(sdt->guard_tag), be16_to_cpu(csum));
197197 return -EIO;
198198 }
199199
200− buf += bix->sector_size;
201− sector++;
200+ buf += bix->interval;
201+ seed++;
202202 }
203203
204204 return 0;
include/linux/blkdev.h+3−3
@@ -1464,9 +1464,9 @@ static inline uint64_t rq_io_start_time_ns(struct request *req) · 1463 unmodified lines
14641464 struct blk_integrity_exchg {
14651465 void *prot_buf;
14661466 void *data_buf;
1467− sector_t sector;
1467+ sector_t seed;
14681468 unsigned int data_size;
1469− unsigned short sector_size;
1469+ unsigned short interval;
14701470 const char *disk_name;
14711471 };
14721472
@@ -1479,7 +1479,7 @@ struct blk_integrity { · 6 unmodified lines
14791479
14801480 unsigned short flags;
14811481 unsigned short tuple_size;
1482− unsigned short sector_size;
1482+ unsigned short interval;
14831483 unsigned short tag_size;
14841484
14851485 const char *name;