splice: fix bad unlock_page() in error case
PATCH 1/1 splice: fix bad unlock_page() in error case
Hi,
If add_to_page_cache_lru() fails, the page will not be locked. But splice jumps to an error path that does a page release and unlock, causing a BUG() in unlock_page().
Fix this by adding one more label that just releases the page. This bug was actually triggered on EL5 by gurudas pai <[email protected]> using fio.
Signed-off-by Jens Axboe <[email protected]>
fs/splice.c +3 -2
@@ -628,7 +628,7 @@ find_page: ret =add_to_page_cache_lru (page, mapping, index,GFP_KERNEL );if (unlikely (ret)) - goto out; + goto out_release; } ret = mapping->a_ops->prepare_write (file, page, offset, offset+this_len);
@@ -684,8 +684,9 @@ find_page:*/ mark_page_accessed (page); out: -page_cache_release (page);unlock_page (page); +out_release: +page_cache_release (page); out_ret:return ret; }
Signature · 1 line
Jens Axboe