diff options
-rw-r--r-- | fs/btrfs/inode.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index dc520749f51d..17856e92b93d 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -630,11 +630,18 @@ cont: start, end - start + 1); - for (i = 0; i < nr_pages; i++) { - WARN_ON(pages[i]->mapping); - put_page(pages[i]); + /* + * Ensure we only free the compressed pages if we have + * them allocated, as we can still reach here with + * inode_need_compress() == false. + */ + if (pages) { + for (i = 0; i < nr_pages; i++) { + WARN_ON(pages[i]->mapping); + put_page(pages[i]); + } + kfree(pages); } - kfree(pages); return; } |