]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/buffer.c
h63xx: tsc2101 alsa sound support
[linux-2.6-omap-h63xx.git] / fs / buffer.c
index 8bcbac87a28c6dba2a747bd5ea60fafbd362aeaf..a9b3994020074a800c4480bb72fed0ac0bc64f5f 100644 (file)
@@ -1022,6 +1022,7 @@ try_again:
 
                bh->b_state = 0;
                atomic_set(&bh->b_count, 0);
+               bh->b_private = NULL;
                bh->b_size = size;
 
                /* Link the buffer to its page */
@@ -2866,22 +2867,22 @@ void ll_rw_block(int rw, int nr, struct buffer_head *bhs[])
                else if (test_set_buffer_locked(bh))
                        continue;
 
-               get_bh(bh);
                if (rw == WRITE || rw == SWRITE) {
                        if (test_clear_buffer_dirty(bh)) {
                                bh->b_end_io = end_buffer_write_sync;
+                               get_bh(bh);
                                submit_bh(WRITE, bh);
                                continue;
                        }
                } else {
                        if (!buffer_uptodate(bh)) {
                                bh->b_end_io = end_buffer_read_sync;
+                               get_bh(bh);
                                submit_bh(rw, bh);
                                continue;
                        }
                }
                unlock_buffer(bh);
-               put_bh(bh);
        }
 }
 
@@ -3059,6 +3060,7 @@ int buffer_migrate_page(struct page *newpage, struct page *page)
 {
        struct address_space *mapping = page->mapping;
        struct buffer_head *bh, *head;
+       int rc;
 
        if (!mapping)
                return -EAGAIN;
@@ -3068,8 +3070,9 @@ int buffer_migrate_page(struct page *newpage, struct page *page)
 
        head = page_buffers(page);
 
-       if (migrate_page_remove_references(newpage, page, 3))
-               return -EAGAIN;
+       rc = migrate_page_remove_references(newpage, page, 3);
+       if (rc)
+               return rc;
 
        bh = head;
        do {