]> granicus.if.org Git - zfs/commit
Fix crash when using ZFS on Ceph rbd
authorChunwei Chen <tuxoko@gmail.com>
Tue, 22 Apr 2014 08:45:36 +0000 (16:45 +0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 25 Apr 2014 22:26:52 +0000 (15:26 -0700)
commitae16ed992bd0ef5a55b04d9edaaa6456674315f9
tree8f0835bcb39f22f18d93baf9504c6bc82fb4d86a
parentd6e6e4a98eef03971213044d4277edd56dda61ab
Fix crash when using ZFS on Ceph rbd

When using __get_free_pages to get high order memory, only the first page's
_count will set to 1, other's will be 0. When an internal page get passed into
rbd, it will eventully go into tcp_sendpage. There, it will be called with
get_page and put_page, and get freed erroneously when _count jump back to 0.

The solution to this problem is to use compound page. All pages in a
high order compound page share a single _count. So get_page and put_page in
tcp_sendpage will not cause _count jump to 0.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #251
module/spl/spl-kmem.c