drivers/block/dst/kst.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/drivers/block/dst/kst.c b/drivers/block/dst/kst.c index 8fa3387..d275bb9 100644 --- a/drivers/block/dst/kst.c +++ b/drivers/block/dst/kst.c @@ -1111,8 +1111,17 @@ static int kst_export_read_end_io(struct bio *bio, unsigned int size, int err) return 0; } + /* FIXME: This is a litle bit strange, but bio_end_io will + be called one more time for this bio later from here: + ->kst_complete_req + ->kst_bio_endio + At this moment network layer has already pinned bio's pages + and we may sefly release all pages, so let's reuse existing + kst_export_write_end_io method instead of writing new one. + */ bio->bi_size = req->size = req->orig_size; bio->bi_rw = WRITE; + bio->bi_end_io = kst_export_write_end_io; if (use_csum) req->flags &= ~(DST_REQ_HEADER_SENT | DST_REQ_CHEKSUM_RECV);