X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=block%2Fbio.c;h=8c2e55e39a1b9a6eca0c169f658b35a8006f5372;hb=09abd1fd11f98d6abde9c23244234170e7e36c2f;hp=97e832cc9b9cb1f56dc5c72c182e32eaa8bedea2;hpb=762380ad9322951cea4ce9d24864265f9c66a916;p=deliverable%2Flinux.git diff --git a/block/bio.c b/block/bio.c index 97e832cc9b9c..8c2e55e39a1b 100644 --- a/block/bio.c +++ b/block/bio.c @@ -849,8 +849,13 @@ int bio_add_page(struct bio *bio, struct page *page, unsigned int len, unsigned int offset) { struct request_queue *q = bdev_get_queue(bio->bi_bdev); + unsigned int max_sectors; - return __bio_add_page(q, bio, page, len, offset, blk_max_size_offset(q, bio->bi_iter.bi_sector)); + max_sectors = blk_max_size_offset(q, bio->bi_iter.bi_sector); + if ((max_sectors < (len >> 9)) && !bio->bi_iter.bi_size) + max_sectors = len >> 9; + + return __bio_add_page(q, bio, page, len, offset, max_sectors); } EXPORT_SYMBOL(bio_add_page); @@ -1972,7 +1977,7 @@ int bio_associate_current(struct bio *bio) /* associate blkcg if exists */ rcu_read_lock(); css = task_css(current, blkio_cgrp_id); - if (css && css_tryget(css)) + if (css && css_tryget_online(css)) bio->bi_css = css; rcu_read_unlock();