gfs2: Fix iomap buffer head reference counting bug
authorAndreas Gruenbacher <agruenba@redhat.com>
Sun, 11 Nov 2018 11:15:21 +0000 (11:15 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 1 Dec 2018 08:37:34 +0000 (09:37 +0100)
commit38084377af4fc8093f02a47e43124579affa7b16
treedd2c7582a4d11bf5e38ccb8125603e58927ec9f2
parent9365cdf8db5139f63ffd51fc2743c90cb95fd991
gfs2: Fix iomap buffer head reference counting bug

commit c26b5aa8ef0d46035060fded475e6ab957b9f69f upstream.

GFS2 passes the inode buffer head (dibh) from gfs2_iomap_begin to
gfs2_iomap_end in iomap->private.  It sets that private pointer in
gfs2_iomap_get.  Users of gfs2_iomap_get other than gfs2_iomap_begin
would have to release iomap->private, but this isn't done correctly,
leading to a leak of buffer head references.

To fix this, move the code for setting iomap->private from
gfs2_iomap_get to gfs2_iomap_begin.

Fixes: 64bc06bb32 ("gfs2: iomap buffered write support")
Cc: stable@vger.kernel.org # v4.19+
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/gfs2/bmap.c