Commit a2dec7b36364a5cc564c4d76cf16d2e7d33f5c05

Authored by Tejun Heo
Committed by Jens Axboe
1 parent 34b7d2c957

block: hide request sector and data_len

Block low level drivers for some reason have been pretty good at
abusing block layer API.  Especially struct request's fields tend to
get violated in all possible ways.  Make it clear that low level
drivers MUST NOT access or manipulate rq->sector and rq->data_len
directly by prefixing them with double underscores.

This change is also necessary to break build of out-of-tree codes
which assume the previous block API where internal fields can be
manipulated and rq->data_len carries residual count on completion.

[ Impact: hide internal fields, block API change ]

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>

Showing 4 changed files with 17 additions and 16 deletions Side-by-side Diff

... ... @@ -127,7 +127,7 @@
127 127 INIT_LIST_HEAD(&rq->timeout_list);
128 128 rq->cpu = -1;
129 129 rq->q = q;
130   - rq->sector = (sector_t) -1;
  130 + rq->__sector = (sector_t) -1;
131 131 INIT_HLIST_NODE(&rq->hash);
132 132 RB_CLEAR_NODE(&rq->rb_node);
133 133 rq->cmd = rq->__cmd;
... ... @@ -1095,7 +1095,7 @@
1095 1095 req->cmd_flags |= REQ_NOIDLE;
1096 1096  
1097 1097 req->errors = 0;
1098   - req->sector = bio->bi_sector;
  1098 + req->__sector = bio->bi_sector;
1099 1099 req->ioprio = bio_prio(bio);
1100 1100 blk_rq_bio_prep(req->q, req, bio);
1101 1101 }
... ... @@ -1143,7 +1143,7 @@
1143 1143  
1144 1144 req->biotail->bi_next = bio;
1145 1145 req->biotail = bio;
1146   - req->data_len += bytes;
  1146 + req->__data_len += bytes;
1147 1147 req->ioprio = ioprio_best(req->ioprio, prio);
1148 1148 if (!blk_rq_cpu_valid(req))
1149 1149 req->cpu = bio->bi_comp_cpu;
... ... @@ -1169,8 +1169,8 @@
1169 1169 * not touch req->buffer either...
1170 1170 */
1171 1171 req->buffer = bio_data(bio);
1172   - req->sector = bio->bi_sector;
1173   - req->data_len += bytes;
  1172 + req->__sector = bio->bi_sector;
  1173 + req->__data_len += bytes;
1174 1174 req->ioprio = ioprio_best(req->ioprio, prio);
1175 1175 if (!blk_rq_cpu_valid(req))
1176 1176 req->cpu = bio->bi_comp_cpu;
... ... @@ -1878,7 +1878,7 @@
1878 1878 * can find how many bytes remain in the request
1879 1879 * later.
1880 1880 */
1881   - req->data_len = 0;
  1881 + req->__data_len = 0;
1882 1882 return false;
1883 1883 }
1884 1884  
1885 1885  
... ... @@ -1892,12 +1892,12 @@
1892 1892 bio_iovec(bio)->bv_len -= nr_bytes;
1893 1893 }
1894 1894  
1895   - req->data_len -= total_bytes;
  1895 + req->__data_len -= total_bytes;
1896 1896 req->buffer = bio_data(req->bio);
1897 1897  
1898 1898 /* update sector only for requests with clear definition of sector */
1899 1899 if (blk_fs_request(req) || blk_discard_rq(req))
1900   - req->sector += total_bytes >> 9;
  1900 + req->__sector += total_bytes >> 9;
1901 1901  
1902 1902 /*
1903 1903 * If total number of sectors is less than the first segment
... ... @@ -1905,7 +1905,7 @@
1905 1905 */
1906 1906 if (blk_rq_bytes(req) < blk_rq_cur_bytes(req)) {
1907 1907 printk(KERN_ERR "blk: request botched\n");
1908   - req->data_len = blk_rq_cur_bytes(req);
  1908 + req->__data_len = blk_rq_cur_bytes(req);
1909 1909 }
1910 1910  
1911 1911 /* recalculate the number of segments */
... ... @@ -2032,7 +2032,7 @@
2032 2032 rq->nr_phys_segments = bio_phys_segments(q, bio);
2033 2033 rq->buffer = bio_data(bio);
2034 2034 }
2035   - rq->data_len = bio->bi_size;
  2035 + rq->__data_len = bio->bi_size;
2036 2036 rq->bio = rq->biotail = bio;
2037 2037  
2038 2038 if (bio->bi_bdev)
... ... @@ -20,7 +20,7 @@
20 20 rq->biotail->bi_next = bio;
21 21 rq->biotail = bio;
22 22  
23   - rq->data_len += bio->bi_size;
  23 + rq->__data_len += bio->bi_size;
24 24 }
25 25 return 0;
26 26 }
... ... @@ -370,7 +370,7 @@
370 370 req->biotail->bi_next = next->bio;
371 371 req->biotail = next->biotail;
372 372  
373   - req->data_len += blk_rq_bytes(next);
  373 + req->__data_len += blk_rq_bytes(next);
374 374  
375 375 elv_merge_requests(q, req, next);
376 376  
include/linux/blkdev.h
... ... @@ -166,8 +166,9 @@
166 166 enum rq_cmd_type_bits cmd_type;
167 167 unsigned long atomic_flags;
168 168  
169   - sector_t sector; /* sector cursor */
170   - unsigned int data_len; /* total data len, don't access directly */
  169 + /* the following two fields are internal, NEVER access directly */
  170 + sector_t __sector; /* sector cursor */
  171 + unsigned int __data_len; /* total data len */
171 172  
172 173 struct bio *bio;
173 174 struct bio *biotail;
174 175  
... ... @@ -828,12 +829,12 @@
828 829 */
829 830 static inline sector_t blk_rq_pos(const struct request *rq)
830 831 {
831   - return rq->sector;
  832 + return rq->__sector;
832 833 }
833 834  
834 835 static inline unsigned int blk_rq_bytes(const struct request *rq)
835 836 {
836   - return rq->data_len;
  837 + return rq->__data_len;
837 838 }
838 839  
839 840 static inline int blk_rq_cur_bytes(const struct request *rq)