gfs2: Abort gfs2_freeze if io error is seen
authorBob Peterson <rpeterso@redhat.com>
Fri, 15 Nov 2019 14:42:46 +0000 (09:42 -0500)
committerAndreas Gruenbacher <agruenba@redhat.com>
Fri, 15 Nov 2019 16:57:30 +0000 (17:57 +0100)
commit52b1cdcb7a84a4a3cec0093eaf390bf2e11e4278
treea683c3b2fe2844f04f41a14046e0b9152f2d5439
parent60528afa78667baf5ffe8e57ccbe77cd024534c5
gfs2: Abort gfs2_freeze if io error is seen

Before this patch, an io error, such as -EIO writing to the journal
would cause function gfs2_freeze to go into an infinite loop,
continuously retrying the freeze operation. But nothing ever clears
the -EIO except unmount after withdraw, which is impossible if the
freeze operation never ends (fails). Instead you get:

[ 6499.767994] gfs2: fsid=dm-32.0: error freezing FS: -5
[ 6499.773058] gfs2: fsid=dm-32.0: retrying...
[ 6500.791957] gfs2: fsid=dm-32.0: error freezing FS: -5
[ 6500.797015] gfs2: fsid=dm-32.0: retrying...

This patch adds a check for -EIO in gfs2_freeze, and if seen, it
dequeues the freeze glock, aborts the loop and returns the error.
Also, there's no need to pass the freeze holder to function
gfs2_lock_fs_check_clean since it's only called in one place and
it's a well-known superblock pointer, so this simplifies that.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/super.c