ext4: fix unwritten counter leakage
[firefly-linux-kernel-4.4.55.git] / fs / ext4 / page-io.c
index de77e31cc1191e2588308b64a67a418740cf290b..997002218228424a39c6c415225368e41c076aea 100644 (file)
@@ -71,6 +71,8 @@ void ext4_free_io_end(ext4_io_end_t *io)
        int i;
 
        BUG_ON(!io);
+       BUG_ON(io->flag & EXT4_IO_END_UNWRITTEN);
+
        if (io->page)
                put_page(io->page);
        for (i = 0; i < io->num_io_pages; i++)
@@ -94,6 +96,8 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
        ssize_t size = io->size;
        int ret = 0;
 
+       BUG_ON(!(io->flag & EXT4_IO_END_UNWRITTEN));
+
        ext4_debug("ext4_end_io_nolock: io 0x%p from inode %lu,list->next 0x%p,"
                   "list->prev 0x%p\n",
                   io, inode->i_ino, io->list.next, io->list.prev);
@@ -106,7 +110,7 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
                         "(inode %lu, offset %llu, size %zd, error %d)",
                         inode->i_ino, offset, size, ret);
        }
-
+       io->flag &= ~EXT4_IO_END_UNWRITTEN;
        if (io->iocb)
                aio_complete(io->iocb, io->result, 0);