ALSA: hda - Fix pending unsol events at shutdown
[linux-2.6-block.git] / fs / direct-io.c
index ac7fb19b6ade5dd630cf17e8a539cbbcf66cb229..ae196784f487afa9a4117e0775d42559645d4b73 100644 (file)
@@ -538,8 +538,8 @@ static struct bio *dio_await_one(struct dio *dio)
  */
 static blk_status_t dio_bio_complete(struct dio *dio, struct bio *bio)
 {
-       struct bio_vec *bvec;
        blk_status_t err = bio->bi_status;
+       bool should_dirty = dio->op == REQ_OP_READ && dio->should_dirty;
 
        if (err) {
                if (err == BLK_STS_AGAIN && (bio->bi_opf & REQ_NOWAIT))
@@ -548,19 +548,10 @@ static blk_status_t dio_bio_complete(struct dio *dio, struct bio *bio)
                        dio->io_error = -EIO;
        }
 
-       if (dio->is_async && dio->op == REQ_OP_READ && dio->should_dirty) {
+       if (dio->is_async && should_dirty) {
                bio_check_pages_dirty(bio);     /* transfers ownership */
        } else {
-               struct bvec_iter_all iter_all;
-
-               bio_for_each_segment_all(bvec, bio, iter_all) {
-                       struct page *page = bvec->bv_page;
-
-                       if (dio->op == REQ_OP_READ && !PageCompound(page) &&
-                                       dio->should_dirty)
-                               set_page_dirty_lock(page);
-                       put_page(page);
-               }
+               bio_release_pages(bio, should_dirty);
                bio_put(bio);
        }
        return err;