PageRenderTime 61ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 1ms

/fs/bio.c

https://gitlab.com/LiquidSmooth-Devices/android_kernel_htc_msm8974
C | 1323 lines | 1025 code | 271 blank | 27 comment | 169 complexity | 02fde33f71fd992fc75f1c2dc561fd27 MD5 | raw file
Possible License(s): GPL-2.0
  1. /*
  2. * Copyright (C) 2001 Jens Axboe <axboe@kernel.dk>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public Licens
  14. * along with this program; if not, write to the Free Software
  15. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-
  16. *
  17. */
  18. #include <linux/mm.h>
  19. #include <linux/swap.h>
  20. #include <linux/bio.h>
  21. #include <linux/blkdev.h>
  22. #include <linux/slab.h>
  23. #include <linux/init.h>
  24. #include <linux/kernel.h>
  25. #include <linux/export.h>
  26. #include <linux/mempool.h>
  27. #include <linux/workqueue.h>
  28. #include <scsi/sg.h>
  29. #include <trace/events/block.h>
  30. #define BIO_INLINE_VECS 4
  31. static mempool_t *bio_split_pool __read_mostly;
  32. #define BV(x) { .nr_vecs = x, .name = "biovec-"__stringify(x) }
  33. static struct biovec_slab bvec_slabs[BIOVEC_NR_POOLS] __read_mostly = {
  34. BV(1), BV(4), BV(16), BV(64), BV(128), BV(BIO_MAX_PAGES),
  35. };
  36. #undef BV
  37. struct bio_set *fs_bio_set;
  38. struct bio_slab {
  39. struct kmem_cache *slab;
  40. unsigned int slab_ref;
  41. unsigned int slab_size;
  42. char name[8];
  43. };
  44. static DEFINE_MUTEX(bio_slab_lock);
  45. static struct bio_slab *bio_slabs;
  46. static unsigned int bio_slab_nr, bio_slab_max;
  47. static struct kmem_cache *bio_find_or_create_slab(unsigned int extra_size)
  48. {
  49. unsigned int sz = sizeof(struct bio) + extra_size;
  50. struct kmem_cache *slab = NULL;
  51. struct bio_slab *bslab;
  52. unsigned int i, entry = -1;
  53. mutex_lock(&bio_slab_lock);
  54. i = 0;
  55. while (i < bio_slab_nr) {
  56. bslab = &bio_slabs[i];
  57. if (!bslab->slab && entry == -1)
  58. entry = i;
  59. else if (bslab->slab_size == sz) {
  60. slab = bslab->slab;
  61. bslab->slab_ref++;
  62. break;
  63. }
  64. i++;
  65. }
  66. if (slab)
  67. goto out_unlock;
  68. if (bio_slab_nr == bio_slab_max && entry == -1) {
  69. bio_slab_max <<= 1;
  70. bio_slabs = krealloc(bio_slabs,
  71. bio_slab_max * sizeof(struct bio_slab),
  72. GFP_KERNEL);
  73. if (!bio_slabs)
  74. goto out_unlock;
  75. }
  76. if (entry == -1)
  77. entry = bio_slab_nr++;
  78. bslab = &bio_slabs[entry];
  79. snprintf(bslab->name, sizeof(bslab->name), "bio-%d", entry);
  80. slab = kmem_cache_create(bslab->name, sz, 0, SLAB_HWCACHE_ALIGN, NULL);
  81. if (!slab)
  82. goto out_unlock;
  83. printk(KERN_INFO "bio: create slab <%s> at %d\n", bslab->name, entry);
  84. bslab->slab = slab;
  85. bslab->slab_ref = 1;
  86. bslab->slab_size = sz;
  87. out_unlock:
  88. mutex_unlock(&bio_slab_lock);
  89. return slab;
  90. }
  91. static void bio_put_slab(struct bio_set *bs)
  92. {
  93. struct bio_slab *bslab = NULL;
  94. unsigned int i;
  95. mutex_lock(&bio_slab_lock);
  96. for (i = 0; i < bio_slab_nr; i++) {
  97. if (bs->bio_slab == bio_slabs[i].slab) {
  98. bslab = &bio_slabs[i];
  99. break;
  100. }
  101. }
  102. if (WARN(!bslab, KERN_ERR "bio: unable to find slab!\n"))
  103. goto out;
  104. WARN_ON(!bslab->slab_ref);
  105. if (--bslab->slab_ref)
  106. goto out;
  107. kmem_cache_destroy(bslab->slab);
  108. bslab->slab = NULL;
  109. out:
  110. mutex_unlock(&bio_slab_lock);
  111. }
  112. unsigned int bvec_nr_vecs(unsigned short idx)
  113. {
  114. return bvec_slabs[idx].nr_vecs;
  115. }
  116. void bvec_free_bs(struct bio_set *bs, struct bio_vec *bv, unsigned int idx)
  117. {
  118. BIO_BUG_ON(idx >= BIOVEC_NR_POOLS);
  119. if (idx == BIOVEC_MAX_IDX)
  120. mempool_free(bv, bs->bvec_pool);
  121. else {
  122. struct biovec_slab *bvs = bvec_slabs + idx;
  123. kmem_cache_free(bvs->slab, bv);
  124. }
  125. }
  126. struct bio_vec *bvec_alloc_bs(gfp_t gfp_mask, int nr, unsigned long *idx,
  127. struct bio_set *bs)
  128. {
  129. struct bio_vec *bvl;
  130. switch (nr) {
  131. case 1:
  132. *idx = 0;
  133. break;
  134. case 2 ... 4:
  135. *idx = 1;
  136. break;
  137. case 5 ... 16:
  138. *idx = 2;
  139. break;
  140. case 17 ... 64:
  141. *idx = 3;
  142. break;
  143. case 65 ... 128:
  144. *idx = 4;
  145. break;
  146. case 129 ... BIO_MAX_PAGES:
  147. *idx = 5;
  148. break;
  149. default:
  150. return NULL;
  151. }
  152. if (*idx == BIOVEC_MAX_IDX) {
  153. fallback:
  154. bvl = mempool_alloc(bs->bvec_pool, gfp_mask);
  155. } else {
  156. struct biovec_slab *bvs = bvec_slabs + *idx;
  157. gfp_t __gfp_mask = gfp_mask & ~(__GFP_WAIT | __GFP_IO);
  158. __gfp_mask |= __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN;
  159. bvl = kmem_cache_alloc(bvs->slab, __gfp_mask);
  160. if (unlikely(!bvl && (gfp_mask & __GFP_WAIT))) {
  161. *idx = BIOVEC_MAX_IDX;
  162. goto fallback;
  163. }
  164. }
  165. return bvl;
  166. }
  167. void bio_free(struct bio *bio, struct bio_set *bs)
  168. {
  169. void *p;
  170. if (bio_has_allocated_vec(bio))
  171. bvec_free_bs(bs, bio->bi_io_vec, BIO_POOL_IDX(bio));
  172. if (bio_integrity(bio))
  173. bio_integrity_free(bio, bs);
  174. p = bio;
  175. if (bs->front_pad)
  176. p -= bs->front_pad;
  177. mempool_free(p, bs->bio_pool);
  178. }
  179. EXPORT_SYMBOL(bio_free);
  180. void bio_init(struct bio *bio)
  181. {
  182. memset(bio, 0, sizeof(*bio));
  183. bio->bi_flags = 1 << BIO_UPTODATE;
  184. atomic_set(&bio->bi_cnt, 1);
  185. }
  186. EXPORT_SYMBOL(bio_init);
  187. struct bio *bio_alloc_bioset(gfp_t gfp_mask, int nr_iovecs, struct bio_set *bs)
  188. {
  189. unsigned long idx = BIO_POOL_NONE;
  190. struct bio_vec *bvl = NULL;
  191. struct bio *bio;
  192. void *p;
  193. p = mempool_alloc(bs->bio_pool, gfp_mask);
  194. if (unlikely(!p))
  195. return NULL;
  196. bio = p + bs->front_pad;
  197. bio_init(bio);
  198. if (unlikely(!nr_iovecs))
  199. goto out_set;
  200. if (nr_iovecs <= BIO_INLINE_VECS) {
  201. bvl = bio->bi_inline_vecs;
  202. nr_iovecs = BIO_INLINE_VECS;
  203. } else {
  204. bvl = bvec_alloc_bs(gfp_mask, nr_iovecs, &idx, bs);
  205. if (unlikely(!bvl))
  206. goto err_free;
  207. nr_iovecs = bvec_nr_vecs(idx);
  208. }
  209. out_set:
  210. bio->bi_flags |= idx << BIO_POOL_OFFSET;
  211. bio->bi_max_vecs = nr_iovecs;
  212. bio->bi_io_vec = bvl;
  213. return bio;
  214. err_free:
  215. mempool_free(p, bs->bio_pool);
  216. return NULL;
  217. }
  218. EXPORT_SYMBOL(bio_alloc_bioset);
  219. static void bio_fs_destructor(struct bio *bio)
  220. {
  221. bio_free(bio, fs_bio_set);
  222. }
  223. struct bio *bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs)
  224. {
  225. struct bio *bio = bio_alloc_bioset(gfp_mask, nr_iovecs, fs_bio_set);
  226. if (bio)
  227. bio->bi_destructor = bio_fs_destructor;
  228. return bio;
  229. }
  230. EXPORT_SYMBOL(bio_alloc);
  231. static void bio_kmalloc_destructor(struct bio *bio)
  232. {
  233. if (bio_integrity(bio))
  234. bio_integrity_free(bio, fs_bio_set);
  235. kfree(bio);
  236. }
  237. struct bio *bio_kmalloc(gfp_t gfp_mask, unsigned int nr_iovecs)
  238. {
  239. struct bio *bio;
  240. if (nr_iovecs > UIO_MAXIOV)
  241. return NULL;
  242. bio = kmalloc(sizeof(struct bio) + nr_iovecs * sizeof(struct bio_vec),
  243. gfp_mask);
  244. if (unlikely(!bio))
  245. return NULL;
  246. bio_init(bio);
  247. bio->bi_flags |= BIO_POOL_NONE << BIO_POOL_OFFSET;
  248. bio->bi_max_vecs = nr_iovecs;
  249. bio->bi_io_vec = bio->bi_inline_vecs;
  250. bio->bi_destructor = bio_kmalloc_destructor;
  251. return bio;
  252. }
  253. EXPORT_SYMBOL(bio_kmalloc);
  254. void zero_fill_bio(struct bio *bio)
  255. {
  256. unsigned long flags;
  257. struct bio_vec *bv;
  258. int i;
  259. bio_for_each_segment(bv, bio, i) {
  260. char *data = bvec_kmap_irq(bv, &flags);
  261. memset(data, 0, bv->bv_len);
  262. flush_dcache_page(bv->bv_page);
  263. bvec_kunmap_irq(data, &flags);
  264. }
  265. }
  266. EXPORT_SYMBOL(zero_fill_bio);
  267. void bio_put(struct bio *bio)
  268. {
  269. BIO_BUG_ON(!atomic_read(&bio->bi_cnt));
  270. if (atomic_dec_and_test(&bio->bi_cnt)) {
  271. bio->bi_next = NULL;
  272. bio->bi_destructor(bio);
  273. }
  274. }
  275. EXPORT_SYMBOL(bio_put);
  276. inline int bio_phys_segments(struct request_queue *q, struct bio *bio)
  277. {
  278. if (unlikely(!bio_flagged(bio, BIO_SEG_VALID)))
  279. blk_recount_segments(q, bio);
  280. return bio->bi_phys_segments;
  281. }
  282. EXPORT_SYMBOL(bio_phys_segments);
  283. void __bio_clone(struct bio *bio, struct bio *bio_src)
  284. {
  285. memcpy(bio->bi_io_vec, bio_src->bi_io_vec,
  286. bio_src->bi_max_vecs * sizeof(struct bio_vec));
  287. bio->bi_sector = bio_src->bi_sector;
  288. bio->bi_bdev = bio_src->bi_bdev;
  289. bio->bi_flags |= 1 << BIO_CLONED;
  290. bio->bi_rw = bio_src->bi_rw;
  291. bio->bi_vcnt = bio_src->bi_vcnt;
  292. bio->bi_size = bio_src->bi_size;
  293. bio->bi_idx = bio_src->bi_idx;
  294. }
  295. EXPORT_SYMBOL(__bio_clone);
  296. struct bio *bio_clone(struct bio *bio, gfp_t gfp_mask)
  297. {
  298. struct bio *b = bio_alloc_bioset(gfp_mask, bio->bi_max_vecs, fs_bio_set);
  299. if (!b)
  300. return NULL;
  301. b->bi_destructor = bio_fs_destructor;
  302. __bio_clone(b, bio);
  303. if (bio_integrity(bio)) {
  304. int ret;
  305. ret = bio_integrity_clone(b, bio, gfp_mask, fs_bio_set);
  306. if (ret < 0) {
  307. bio_put(b);
  308. return NULL;
  309. }
  310. }
  311. return b;
  312. }
  313. EXPORT_SYMBOL(bio_clone);
  314. int bio_get_nr_vecs(struct block_device *bdev)
  315. {
  316. struct request_queue *q = bdev_get_queue(bdev);
  317. int nr_pages;
  318. nr_pages = min_t(unsigned,
  319. queue_max_segments(q),
  320. queue_max_sectors(q) / (PAGE_SIZE >> 9) + 1);
  321. return min_t(unsigned, nr_pages, BIO_MAX_PAGES);
  322. }
  323. EXPORT_SYMBOL(bio_get_nr_vecs);
  324. static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
  325. *page, unsigned int len, unsigned int offset,
  326. unsigned short max_sectors)
  327. {
  328. int retried_segments = 0;
  329. struct bio_vec *bvec;
  330. if (unlikely(bio_flagged(bio, BIO_CLONED)))
  331. return 0;
  332. if (((bio->bi_size + len) >> 9) > max_sectors)
  333. return 0;
  334. if (bio->bi_vcnt > 0) {
  335. struct bio_vec *prev = &bio->bi_io_vec[bio->bi_vcnt - 1];
  336. if (page == prev->bv_page &&
  337. offset == prev->bv_offset + prev->bv_len) {
  338. unsigned int prev_bv_len = prev->bv_len;
  339. prev->bv_len += len;
  340. if (q->merge_bvec_fn) {
  341. struct bvec_merge_data bvm = {
  342. .bi_bdev = bio->bi_bdev,
  343. .bi_sector = bio->bi_sector,
  344. .bi_size = bio->bi_size - prev_bv_len,
  345. .bi_rw = bio->bi_rw,
  346. };
  347. if (q->merge_bvec_fn(q, &bvm, prev) < prev->bv_len) {
  348. prev->bv_len -= len;
  349. return 0;
  350. }
  351. }
  352. goto done;
  353. }
  354. }
  355. if (bio->bi_vcnt >= bio->bi_max_vecs)
  356. return 0;
  357. while (bio->bi_phys_segments >= queue_max_segments(q)) {
  358. if (retried_segments)
  359. return 0;
  360. retried_segments = 1;
  361. blk_recount_segments(q, bio);
  362. }
  363. bvec = &bio->bi_io_vec[bio->bi_vcnt];
  364. bvec->bv_page = page;
  365. bvec->bv_len = len;
  366. bvec->bv_offset = offset;
  367. if (q->merge_bvec_fn) {
  368. struct bvec_merge_data bvm = {
  369. .bi_bdev = bio->bi_bdev,
  370. .bi_sector = bio->bi_sector,
  371. .bi_size = bio->bi_size,
  372. .bi_rw = bio->bi_rw,
  373. };
  374. if (q->merge_bvec_fn(q, &bvm, bvec) < bvec->bv_len) {
  375. bvec->bv_page = NULL;
  376. bvec->bv_len = 0;
  377. bvec->bv_offset = 0;
  378. return 0;
  379. }
  380. }
  381. if (bio->bi_vcnt && (BIOVEC_PHYS_MERGEABLE(bvec-1, bvec)))
  382. bio->bi_flags &= ~(1 << BIO_SEG_VALID);
  383. bio->bi_vcnt++;
  384. bio->bi_phys_segments++;
  385. done:
  386. bio->bi_size += len;
  387. return len;
  388. }
  389. int bio_add_pc_page(struct request_queue *q, struct bio *bio, struct page *page,
  390. unsigned int len, unsigned int offset)
  391. {
  392. return __bio_add_page(q, bio, page, len, offset,
  393. queue_max_hw_sectors(q));
  394. }
  395. EXPORT_SYMBOL(bio_add_pc_page);
  396. int bio_add_page(struct bio *bio, struct page *page, unsigned int len,
  397. unsigned int offset)
  398. {
  399. struct request_queue *q = bdev_get_queue(bio->bi_bdev);
  400. return __bio_add_page(q, bio, page, len, offset, queue_max_sectors(q));
  401. }
  402. EXPORT_SYMBOL(bio_add_page);
  403. struct bio_map_data {
  404. struct bio_vec *iovecs;
  405. struct sg_iovec *sgvecs;
  406. int nr_sgvecs;
  407. int is_our_pages;
  408. };
  409. static void bio_set_map_data(struct bio_map_data *bmd, struct bio *bio,
  410. struct sg_iovec *iov, int iov_count,
  411. int is_our_pages)
  412. {
  413. memcpy(bmd->iovecs, bio->bi_io_vec, sizeof(struct bio_vec) * bio->bi_vcnt);
  414. memcpy(bmd->sgvecs, iov, sizeof(struct sg_iovec) * iov_count);
  415. bmd->nr_sgvecs = iov_count;
  416. bmd->is_our_pages = is_our_pages;
  417. bio->bi_private = bmd;
  418. }
  419. static void bio_free_map_data(struct bio_map_data *bmd)
  420. {
  421. kfree(bmd->iovecs);
  422. kfree(bmd->sgvecs);
  423. kfree(bmd);
  424. }
  425. static struct bio_map_data *bio_alloc_map_data(int nr_segs,
  426. unsigned int iov_count,
  427. gfp_t gfp_mask)
  428. {
  429. struct bio_map_data *bmd;
  430. if (iov_count > UIO_MAXIOV)
  431. return NULL;
  432. bmd = kmalloc(sizeof(*bmd), gfp_mask);
  433. if (!bmd)
  434. return NULL;
  435. bmd->iovecs = kmalloc(sizeof(struct bio_vec) * nr_segs, gfp_mask);
  436. if (!bmd->iovecs) {
  437. kfree(bmd);
  438. return NULL;
  439. }
  440. bmd->sgvecs = kmalloc(sizeof(struct sg_iovec) * iov_count, gfp_mask);
  441. if (bmd->sgvecs)
  442. return bmd;
  443. kfree(bmd->iovecs);
  444. kfree(bmd);
  445. return NULL;
  446. }
  447. static int __bio_copy_iov(struct bio *bio, struct bio_vec *iovecs,
  448. struct sg_iovec *iov, int iov_count,
  449. int to_user, int from_user, int do_free_page)
  450. {
  451. int ret = 0, i;
  452. struct bio_vec *bvec;
  453. int iov_idx = 0;
  454. unsigned int iov_off = 0;
  455. __bio_for_each_segment(bvec, bio, i, 0) {
  456. char *bv_addr = page_address(bvec->bv_page);
  457. unsigned int bv_len = iovecs[i].bv_len;
  458. while (bv_len && iov_idx < iov_count) {
  459. unsigned int bytes;
  460. char __user *iov_addr;
  461. bytes = min_t(unsigned int,
  462. iov[iov_idx].iov_len - iov_off, bv_len);
  463. iov_addr = iov[iov_idx].iov_base + iov_off;
  464. if (!ret) {
  465. if (to_user)
  466. ret = copy_to_user(iov_addr, bv_addr,
  467. bytes);
  468. if (from_user)
  469. ret = copy_from_user(bv_addr, iov_addr,
  470. bytes);
  471. if (ret)
  472. ret = -EFAULT;
  473. }
  474. bv_len -= bytes;
  475. bv_addr += bytes;
  476. iov_addr += bytes;
  477. iov_off += bytes;
  478. if (iov[iov_idx].iov_len == iov_off) {
  479. iov_idx++;
  480. iov_off = 0;
  481. }
  482. }
  483. if (do_free_page)
  484. __free_page(bvec->bv_page);
  485. }
  486. return ret;
  487. }
  488. int bio_uncopy_user(struct bio *bio)
  489. {
  490. struct bio_map_data *bmd = bio->bi_private;
  491. int ret = 0;
  492. if (!bio_flagged(bio, BIO_NULL_MAPPED))
  493. ret = __bio_copy_iov(bio, bmd->iovecs, bmd->sgvecs,
  494. bmd->nr_sgvecs, bio_data_dir(bio) == READ,
  495. 0, bmd->is_our_pages);
  496. bio_free_map_data(bmd);
  497. bio_put(bio);
  498. return ret;
  499. }
  500. EXPORT_SYMBOL(bio_uncopy_user);
  501. struct bio *bio_copy_user_iov(struct request_queue *q,
  502. struct rq_map_data *map_data,
  503. struct sg_iovec *iov, int iov_count,
  504. int write_to_vm, gfp_t gfp_mask)
  505. {
  506. struct bio_map_data *bmd;
  507. struct bio_vec *bvec;
  508. struct page *page;
  509. struct bio *bio;
  510. int i, ret;
  511. int nr_pages = 0;
  512. unsigned int len = 0;
  513. unsigned int offset = map_data ? map_data->offset & ~PAGE_MASK : 0;
  514. for (i = 0; i < iov_count; i++) {
  515. unsigned long uaddr;
  516. unsigned long end;
  517. unsigned long start;
  518. uaddr = (unsigned long)iov[i].iov_base;
  519. end = (uaddr + iov[i].iov_len + PAGE_SIZE - 1) >> PAGE_SHIFT;
  520. start = uaddr >> PAGE_SHIFT;
  521. if (end < start)
  522. return ERR_PTR(-EINVAL);
  523. nr_pages += end - start;
  524. len += iov[i].iov_len;
  525. }
  526. if (offset)
  527. nr_pages++;
  528. bmd = bio_alloc_map_data(nr_pages, iov_count, gfp_mask);
  529. if (!bmd)
  530. return ERR_PTR(-ENOMEM);
  531. ret = -ENOMEM;
  532. bio = bio_kmalloc(gfp_mask, nr_pages);
  533. if (!bio)
  534. goto out_bmd;
  535. if (!write_to_vm)
  536. bio->bi_rw |= REQ_WRITE;
  537. ret = 0;
  538. if (map_data) {
  539. nr_pages = 1 << map_data->page_order;
  540. i = map_data->offset / PAGE_SIZE;
  541. }
  542. while (len) {
  543. unsigned int bytes = PAGE_SIZE;
  544. bytes -= offset;
  545. if (bytes > len)
  546. bytes = len;
  547. if (map_data) {
  548. if (i == map_data->nr_entries * nr_pages) {
  549. ret = -ENOMEM;
  550. break;
  551. }
  552. page = map_data->pages[i / nr_pages];
  553. page += (i % nr_pages);
  554. i++;
  555. } else {
  556. page = alloc_page(q->bounce_gfp | gfp_mask);
  557. if (!page) {
  558. ret = -ENOMEM;
  559. break;
  560. }
  561. }
  562. if (bio_add_pc_page(q, bio, page, bytes, offset) < bytes)
  563. break;
  564. len -= bytes;
  565. offset = 0;
  566. }
  567. if (ret)
  568. goto cleanup;
  569. if ((!write_to_vm && (!map_data || !map_data->null_mapped)) ||
  570. (map_data && map_data->from_user)) {
  571. ret = __bio_copy_iov(bio, bio->bi_io_vec, iov, iov_count, 0, 1, 0);
  572. if (ret)
  573. goto cleanup;
  574. }
  575. bio_set_map_data(bmd, bio, iov, iov_count, map_data ? 0 : 1);
  576. return bio;
  577. cleanup:
  578. if (!map_data)
  579. bio_for_each_segment(bvec, bio, i)
  580. __free_page(bvec->bv_page);
  581. bio_put(bio);
  582. out_bmd:
  583. bio_free_map_data(bmd);
  584. return ERR_PTR(ret);
  585. }
  586. struct bio *bio_copy_user(struct request_queue *q, struct rq_map_data *map_data,
  587. unsigned long uaddr, unsigned int len,
  588. int write_to_vm, gfp_t gfp_mask)
  589. {
  590. struct sg_iovec iov;
  591. iov.iov_base = (void __user *)uaddr;
  592. iov.iov_len = len;
  593. return bio_copy_user_iov(q, map_data, &iov, 1, write_to_vm, gfp_mask);
  594. }
  595. EXPORT_SYMBOL(bio_copy_user);
  596. static struct bio *__bio_map_user_iov(struct request_queue *q,
  597. struct block_device *bdev,
  598. struct sg_iovec *iov, int iov_count,
  599. int write_to_vm, gfp_t gfp_mask)
  600. {
  601. int i, j;
  602. int nr_pages = 0;
  603. struct page **pages;
  604. struct bio *bio;
  605. int cur_page = 0;
  606. int ret, offset;
  607. for (i = 0; i < iov_count; i++) {
  608. unsigned long uaddr = (unsigned long)iov[i].iov_base;
  609. unsigned long len = iov[i].iov_len;
  610. unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
  611. unsigned long start = uaddr >> PAGE_SHIFT;
  612. if (end < start)
  613. return ERR_PTR(-EINVAL);
  614. nr_pages += end - start;
  615. if (uaddr & queue_dma_alignment(q))
  616. return ERR_PTR(-EINVAL);
  617. }
  618. if (!nr_pages)
  619. return ERR_PTR(-EINVAL);
  620. bio = bio_kmalloc(gfp_mask, nr_pages);
  621. if (!bio)
  622. return ERR_PTR(-ENOMEM);
  623. ret = -ENOMEM;
  624. pages = kcalloc(nr_pages, sizeof(struct page *), gfp_mask);
  625. if (!pages)
  626. goto out;
  627. for (i = 0; i < iov_count; i++) {
  628. unsigned long uaddr = (unsigned long)iov[i].iov_base;
  629. unsigned long len = iov[i].iov_len;
  630. unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
  631. unsigned long start = uaddr >> PAGE_SHIFT;
  632. const int local_nr_pages = end - start;
  633. const int page_limit = cur_page + local_nr_pages;
  634. ret = get_user_pages_fast(uaddr, local_nr_pages,
  635. write_to_vm, &pages[cur_page]);
  636. if (ret < local_nr_pages) {
  637. ret = -EFAULT;
  638. goto out_unmap;
  639. }
  640. offset = uaddr & ~PAGE_MASK;
  641. for (j = cur_page; j < page_limit; j++) {
  642. unsigned int bytes = PAGE_SIZE - offset;
  643. if (len <= 0)
  644. break;
  645. if (bytes > len)
  646. bytes = len;
  647. if (bio_add_pc_page(q, bio, pages[j], bytes, offset) <
  648. bytes)
  649. break;
  650. len -= bytes;
  651. offset = 0;
  652. }
  653. cur_page = j;
  654. while (j < page_limit)
  655. page_cache_release(pages[j++]);
  656. }
  657. kfree(pages);
  658. if (!write_to_vm)
  659. bio->bi_rw |= REQ_WRITE;
  660. bio->bi_bdev = bdev;
  661. bio->bi_flags |= (1 << BIO_USER_MAPPED);
  662. return bio;
  663. out_unmap:
  664. for (i = 0; i < nr_pages; i++) {
  665. if(!pages[i])
  666. break;
  667. page_cache_release(pages[i]);
  668. }
  669. out:
  670. kfree(pages);
  671. bio_put(bio);
  672. return ERR_PTR(ret);
  673. }
  674. struct bio *bio_map_user(struct request_queue *q, struct block_device *bdev,
  675. unsigned long uaddr, unsigned int len, int write_to_vm,
  676. gfp_t gfp_mask)
  677. {
  678. struct sg_iovec iov;
  679. iov.iov_base = (void __user *)uaddr;
  680. iov.iov_len = len;
  681. return bio_map_user_iov(q, bdev, &iov, 1, write_to_vm, gfp_mask);
  682. }
  683. EXPORT_SYMBOL(bio_map_user);
  684. struct bio *bio_map_user_iov(struct request_queue *q, struct block_device *bdev,
  685. struct sg_iovec *iov, int iov_count,
  686. int write_to_vm, gfp_t gfp_mask)
  687. {
  688. struct bio *bio;
  689. bio = __bio_map_user_iov(q, bdev, iov, iov_count, write_to_vm,
  690. gfp_mask);
  691. if (IS_ERR(bio))
  692. return bio;
  693. bio_get(bio);
  694. return bio;
  695. }
  696. static void __bio_unmap_user(struct bio *bio)
  697. {
  698. struct bio_vec *bvec;
  699. int i;
  700. __bio_for_each_segment(bvec, bio, i, 0) {
  701. if (bio_data_dir(bio) == READ)
  702. set_page_dirty_lock(bvec->bv_page);
  703. page_cache_release(bvec->bv_page);
  704. }
  705. bio_put(bio);
  706. }
  707. void bio_unmap_user(struct bio *bio)
  708. {
  709. __bio_unmap_user(bio);
  710. bio_put(bio);
  711. }
  712. EXPORT_SYMBOL(bio_unmap_user);
  713. static void bio_map_kern_endio(struct bio *bio, int err)
  714. {
  715. bio_put(bio);
  716. }
  717. static struct bio *__bio_map_kern(struct request_queue *q, void *data,
  718. unsigned int len, gfp_t gfp_mask)
  719. {
  720. unsigned long kaddr = (unsigned long)data;
  721. unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
  722. unsigned long start = kaddr >> PAGE_SHIFT;
  723. const int nr_pages = end - start;
  724. int offset, i;
  725. struct bio *bio;
  726. bio = bio_kmalloc(gfp_mask, nr_pages);
  727. if (!bio)
  728. return ERR_PTR(-ENOMEM);
  729. offset = offset_in_page(kaddr);
  730. for (i = 0; i < nr_pages; i++) {
  731. unsigned int bytes = PAGE_SIZE - offset;
  732. if (len <= 0)
  733. break;
  734. if (bytes > len)
  735. bytes = len;
  736. if (bio_add_pc_page(q, bio, virt_to_page(data), bytes,
  737. offset) < bytes)
  738. break;
  739. data += bytes;
  740. len -= bytes;
  741. offset = 0;
  742. }
  743. bio->bi_end_io = bio_map_kern_endio;
  744. return bio;
  745. }
  746. struct bio *bio_map_kern(struct request_queue *q, void *data, unsigned int len,
  747. gfp_t gfp_mask)
  748. {
  749. struct bio *bio;
  750. bio = __bio_map_kern(q, data, len, gfp_mask);
  751. if (IS_ERR(bio))
  752. return bio;
  753. if (bio->bi_size == len)
  754. return bio;
  755. bio_put(bio);
  756. return ERR_PTR(-EINVAL);
  757. }
  758. EXPORT_SYMBOL(bio_map_kern);
  759. static void bio_copy_kern_endio(struct bio *bio, int err)
  760. {
  761. struct bio_vec *bvec;
  762. const int read = bio_data_dir(bio) == READ;
  763. struct bio_map_data *bmd = bio->bi_private;
  764. int i;
  765. char *p = bmd->sgvecs[0].iov_base;
  766. __bio_for_each_segment(bvec, bio, i, 0) {
  767. char *addr = page_address(bvec->bv_page);
  768. int len = bmd->iovecs[i].bv_len;
  769. if (read)
  770. memcpy(p, addr, len);
  771. __free_page(bvec->bv_page);
  772. p += len;
  773. }
  774. bio_free_map_data(bmd);
  775. bio_put(bio);
  776. }
  777. struct bio *bio_copy_kern(struct request_queue *q, void *data, unsigned int len,
  778. gfp_t gfp_mask, int reading)
  779. {
  780. struct bio *bio;
  781. struct bio_vec *bvec;
  782. int i;
  783. bio = bio_copy_user(q, NULL, (unsigned long)data, len, 1, gfp_mask);
  784. if (IS_ERR(bio))
  785. return bio;
  786. if (!reading) {
  787. void *p = data;
  788. bio_for_each_segment(bvec, bio, i) {
  789. char *addr = page_address(bvec->bv_page);
  790. memcpy(addr, p, bvec->bv_len);
  791. p += bvec->bv_len;
  792. }
  793. }
  794. bio->bi_end_io = bio_copy_kern_endio;
  795. return bio;
  796. }
  797. EXPORT_SYMBOL(bio_copy_kern);
  798. void bio_set_pages_dirty(struct bio *bio)
  799. {
  800. struct bio_vec *bvec = bio->bi_io_vec;
  801. int i;
  802. for (i = 0; i < bio->bi_vcnt; i++) {
  803. struct page *page = bvec[i].bv_page;
  804. if (page && !PageCompound(page))
  805. set_page_dirty_lock(page);
  806. }
  807. }
  808. static void bio_release_pages(struct bio *bio)
  809. {
  810. struct bio_vec *bvec = bio->bi_io_vec;
  811. int i;
  812. for (i = 0; i < bio->bi_vcnt; i++) {
  813. struct page *page = bvec[i].bv_page;
  814. if (page)
  815. put_page(page);
  816. }
  817. }
  818. /*
  819. * bio_check_pages_dirty() will check that all the BIO's pages are still dirty.
  820. * If they are, then fine. If, however, some pages are clean then they must
  821. * have been written out during the direct-IO read. So we take another ref on
  822. * the BIO and the offending pages and re-dirty the pages in process context.
  823. *
  824. * It is expected that bio_check_pages_dirty() will wholly own the BIO from
  825. * here on. It will run one page_cache_release() against each page and will
  826. * run one bio_put() against the BIO.
  827. */
  828. static void bio_dirty_fn(struct work_struct *work);
  829. static DECLARE_WORK(bio_dirty_work, bio_dirty_fn);
  830. static DEFINE_SPINLOCK(bio_dirty_lock);
  831. static struct bio *bio_dirty_list;
  832. static void bio_dirty_fn(struct work_struct *work)
  833. {
  834. unsigned long flags;
  835. struct bio *bio;
  836. spin_lock_irqsave(&bio_dirty_lock, flags);
  837. bio = bio_dirty_list;
  838. bio_dirty_list = NULL;
  839. spin_unlock_irqrestore(&bio_dirty_lock, flags);
  840. while (bio) {
  841. struct bio *next = bio->bi_private;
  842. bio_set_pages_dirty(bio);
  843. bio_release_pages(bio);
  844. bio_put(bio);
  845. bio = next;
  846. }
  847. }
  848. void bio_check_pages_dirty(struct bio *bio)
  849. {
  850. struct bio_vec *bvec = bio->bi_io_vec;
  851. int nr_clean_pages = 0;
  852. int i;
  853. for (i = 0; i < bio->bi_vcnt; i++) {
  854. struct page *page = bvec[i].bv_page;
  855. if (PageDirty(page) || PageCompound(page)) {
  856. page_cache_release(page);
  857. bvec[i].bv_page = NULL;
  858. } else {
  859. nr_clean_pages++;
  860. }
  861. }
  862. if (nr_clean_pages) {
  863. unsigned long flags;
  864. spin_lock_irqsave(&bio_dirty_lock, flags);
  865. bio->bi_private = bio_dirty_list;
  866. bio_dirty_list = bio;
  867. spin_unlock_irqrestore(&bio_dirty_lock, flags);
  868. schedule_work(&bio_dirty_work);
  869. } else {
  870. bio_put(bio);
  871. }
  872. }
  873. #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
  874. void bio_flush_dcache_pages(struct bio *bi)
  875. {
  876. int i;
  877. struct bio_vec *bvec;
  878. bio_for_each_segment(bvec, bi, i)
  879. flush_dcache_page(bvec->bv_page);
  880. }
  881. EXPORT_SYMBOL(bio_flush_dcache_pages);
  882. #endif
  883. void bio_endio(struct bio *bio, int error)
  884. {
  885. if (error)
  886. clear_bit(BIO_UPTODATE, &bio->bi_flags);
  887. else if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
  888. error = -EIO;
  889. if (bio->bi_end_io)
  890. bio->bi_end_io(bio, error);
  891. }
  892. EXPORT_SYMBOL(bio_endio);
  893. void bio_pair_release(struct bio_pair *bp)
  894. {
  895. if (atomic_dec_and_test(&bp->cnt)) {
  896. struct bio *master = bp->bio1.bi_private;
  897. bio_endio(master, bp->error);
  898. mempool_free(bp, bp->bio2.bi_private);
  899. }
  900. }
  901. EXPORT_SYMBOL(bio_pair_release);
  902. static void bio_pair_end_1(struct bio *bi, int err)
  903. {
  904. struct bio_pair *bp = container_of(bi, struct bio_pair, bio1);
  905. if (err)
  906. bp->error = err;
  907. bio_pair_release(bp);
  908. }
  909. static void bio_pair_end_2(struct bio *bi, int err)
  910. {
  911. struct bio_pair *bp = container_of(bi, struct bio_pair, bio2);
  912. if (err)
  913. bp->error = err;
  914. bio_pair_release(bp);
  915. }
  916. struct bio_pair *bio_split(struct bio *bi, int first_sectors)
  917. {
  918. struct bio_pair *bp = mempool_alloc(bio_split_pool, GFP_NOIO);
  919. if (!bp)
  920. return bp;
  921. trace_block_split(bdev_get_queue(bi->bi_bdev), bi,
  922. bi->bi_sector + first_sectors);
  923. BUG_ON(bi->bi_vcnt != 1);
  924. BUG_ON(bi->bi_idx != 0);
  925. atomic_set(&bp->cnt, 3);
  926. bp->error = 0;
  927. bp->bio1 = *bi;
  928. bp->bio2 = *bi;
  929. bp->bio2.bi_sector += first_sectors;
  930. bp->bio2.bi_size -= first_sectors << 9;
  931. bp->bio1.bi_size = first_sectors << 9;
  932. bp->bv1 = bi->bi_io_vec[0];
  933. bp->bv2 = bi->bi_io_vec[0];
  934. bp->bv2.bv_offset += first_sectors << 9;
  935. bp->bv2.bv_len -= first_sectors << 9;
  936. bp->bv1.bv_len = first_sectors << 9;
  937. bp->bio1.bi_io_vec = &bp->bv1;
  938. bp->bio2.bi_io_vec = &bp->bv2;
  939. bp->bio1.bi_max_vecs = 1;
  940. bp->bio2.bi_max_vecs = 1;
  941. bp->bio1.bi_end_io = bio_pair_end_1;
  942. bp->bio2.bi_end_io = bio_pair_end_2;
  943. bp->bio1.bi_private = bi;
  944. bp->bio2.bi_private = bio_split_pool;
  945. if (bio_integrity(bi))
  946. bio_integrity_split(bi, bp, first_sectors);
  947. return bp;
  948. }
  949. EXPORT_SYMBOL(bio_split);
  950. sector_t bio_sector_offset(struct bio *bio, unsigned short index,
  951. unsigned int offset)
  952. {
  953. unsigned int sector_sz;
  954. struct bio_vec *bv;
  955. sector_t sectors;
  956. int i;
  957. sector_sz = queue_logical_block_size(bio->bi_bdev->bd_disk->queue);
  958. sectors = 0;
  959. if (index >= bio->bi_idx)
  960. index = bio->bi_vcnt - 1;
  961. __bio_for_each_segment(bv, bio, i, 0) {
  962. if (i == index) {
  963. if (offset > bv->bv_offset)
  964. sectors += (offset - bv->bv_offset) / sector_sz;
  965. break;
  966. }
  967. sectors += bv->bv_len / sector_sz;
  968. }
  969. return sectors;
  970. }
  971. EXPORT_SYMBOL(bio_sector_offset);
  972. static int biovec_create_pools(struct bio_set *bs, int pool_entries)
  973. {
  974. struct biovec_slab *bp = bvec_slabs + BIOVEC_MAX_IDX;
  975. bs->bvec_pool = mempool_create_slab_pool(pool_entries, bp->slab);
  976. if (!bs->bvec_pool)
  977. return -ENOMEM;
  978. return 0;
  979. }
  980. static void biovec_free_pools(struct bio_set *bs)
  981. {
  982. mempool_destroy(bs->bvec_pool);
  983. }
  984. void bioset_free(struct bio_set *bs)
  985. {
  986. if (bs->bio_pool)
  987. mempool_destroy(bs->bio_pool);
  988. bioset_integrity_free(bs);
  989. biovec_free_pools(bs);
  990. bio_put_slab(bs);
  991. kfree(bs);
  992. }
  993. EXPORT_SYMBOL(bioset_free);
  994. struct bio_set *bioset_create(unsigned int pool_size, unsigned int front_pad)
  995. {
  996. unsigned int back_pad = BIO_INLINE_VECS * sizeof(struct bio_vec);
  997. struct bio_set *bs;
  998. bs = kzalloc(sizeof(*bs), GFP_KERNEL);
  999. if (!bs)
  1000. return NULL;
  1001. bs->front_pad = front_pad;
  1002. bs->bio_slab = bio_find_or_create_slab(front_pad + back_pad);
  1003. if (!bs->bio_slab) {
  1004. kfree(bs);
  1005. return NULL;
  1006. }
  1007. bs->bio_pool = mempool_create_slab_pool(pool_size, bs->bio_slab);
  1008. if (!bs->bio_pool)
  1009. goto bad;
  1010. if (!biovec_create_pools(bs, pool_size))
  1011. return bs;
  1012. bad:
  1013. bioset_free(bs);
  1014. return NULL;
  1015. }
  1016. EXPORT_SYMBOL(bioset_create);
  1017. static void __init biovec_init_slabs(void)
  1018. {
  1019. int i;
  1020. for (i = 0; i < BIOVEC_NR_POOLS; i++) {
  1021. int size;
  1022. struct biovec_slab *bvs = bvec_slabs + i;
  1023. if (bvs->nr_vecs <= BIO_INLINE_VECS) {
  1024. bvs->slab = NULL;
  1025. continue;
  1026. }
  1027. size = bvs->nr_vecs * sizeof(struct bio_vec);
  1028. bvs->slab = kmem_cache_create(bvs->name, size, 0,
  1029. SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
  1030. }
  1031. }
  1032. static int __init init_bio(void)
  1033. {
  1034. bio_slab_max = 2;
  1035. bio_slab_nr = 0;
  1036. bio_slabs = kzalloc(bio_slab_max * sizeof(struct bio_slab), GFP_KERNEL);
  1037. if (!bio_slabs)
  1038. panic("bio: can't allocate bios\n");
  1039. bio_integrity_init();
  1040. biovec_init_slabs();
  1041. fs_bio_set = bioset_create(BIO_POOL_SIZE, 0);
  1042. if (!fs_bio_set)
  1043. panic("bio: can't allocate bios\n");
  1044. if (bioset_integrity_create(fs_bio_set, BIO_POOL_SIZE))
  1045. panic("bio: can't create integrity pool\n");
  1046. bio_split_pool = mempool_create_kmalloc_pool(BIO_SPLIT_ENTRIES,
  1047. sizeof(struct bio_pair));
  1048. if (!bio_split_pool)
  1049. panic("bio: can't create split pool\n");
  1050. return 0;
  1051. }
  1052. subsys_initcall(init_bio);