block: Warn and free bio if bi_end_io is not set
authorMuthukumar Ratty <muthur@gmail.com>
Wed, 8 Jan 2014 16:39:49 +0000 (09:39 -0700)
committerJens Axboe <axboe@kernel.dk>
Wed, 8 Jan 2014 16:39:49 +0000 (09:39 -0700)
In bio_endio if bio doesn't have bi_end_io (should be an error case),
we set bio to NULL and continue silently without freeing the bio. It
would be good to have a WARN and free the bio to avoid memory leak.

Signed-off-by: Muthukumar Ratty <muthur@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/bio.c

index 75c49a3..9156bd1 100644 (file)
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -1770,6 +1770,15 @@ void bio_endio(struct bio *bio, int error)
                } else {
                        if (bio->bi_end_io)
                                bio->bi_end_io(bio, error);
+                       else {
+                               char dev_name[BDEVNAME_SIZE];
+
+                               WARN(1, "bio_endio: bio for %s without endio\n",
+                                       bio->bi_bdev ? bdevname(bio->bi_bdev,
+                                       dev_name) : "(unknown)");
+                               bio_put(bio);
+                       }
+
                        bio = NULL;
                }
        }