[PATCH] swsusp: kill unneeded/unbalanced bio_get
authorPavel Machek <pavel@ucw.cz>
Tue, 7 Feb 2006 20:58:22 +0000 (12:58 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 8 Feb 2006 00:12:31 +0000 (16:12 -0800)
- Remove unneeded bio_get() which would cause a bio leak

- Writing doesn't dirty pages.  Reading dirties pages.

- We should dirty the pages after the IO completion, not before

(Busy-waiting for disk I/O completion isn't very polite.)

Signed-off-by: Pavel Machek <pavel@suse.cz>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
kernel/power/swsusp.c

index 59c91c148e82d0f3ddbbea3a0cdf8260702cd9eb..4e90905f0e87ec1e394acc9c61251b0a2505b3ac 100644 (file)
@@ -743,7 +743,6 @@ static int submit(int rw, pgoff_t page_off, void *page)
        if (!bio)
                return -ENOMEM;
        bio->bi_sector = page_off * (PAGE_SIZE >> 9);
-       bio_get(bio);
        bio->bi_bdev = resume_bdev;
        bio->bi_end_io = end_io;
 
@@ -753,14 +752,13 @@ static int submit(int rw, pgoff_t page_off, void *page)
                goto Done;
        }
 
-       if (rw == WRITE)
-               bio_set_pages_dirty(bio);
 
        atomic_set(&io_done, 1);
        submit_bio(rw | (1 << BIO_RW_SYNC), bio);
        while (atomic_read(&io_done))
                yield();
-
+       if (rw == READ)
+               bio_set_pages_dirty(bio);
  Done:
        bio_put(bio);
        return error;