gfs2: Fix iomap buffer head reference counting bug
authorAndreas Gruenbacher <agruenba@redhat.com>
Sun, 11 Nov 2018 11:15:21 +0000 (11:15 +0000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 16 Nov 2018 17:35:09 +0000 (11:35 -0600)
commitc26b5aa8ef0d46035060fded475e6ab957b9f69f
tree469f981b657c1bc9ed005d96c97b8fb86b2fcb25
parente7445ceddfc220c1aede6d42758a5acb8844e9c3
gfs2: Fix iomap buffer head reference counting bug

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>
fs/gfs2/bmap.c