Skip to content
Commit c86562e6 authored by Leah Rumancik's avatar Leah Rumancik Committed by Greg Kroah-Hartman
Browse files

xfs: up(ic_sema) if flushing data device fails



commit 471de203 upstream.

We flush the data device cache before we issue external log IO. If
the flush fails, we shut down the log immediately and return. However,
the iclog->ic_sema is left in a decremented state so let's add an up().
Prior to this patch, xfs/438 would fail consistently when running with
an external log device:

sync
  -> xfs_log_force
  -> xlog_write_iclog
      -> down(&iclog->ic_sema)
      -> blkdev_issue_flush (fail causes us to intiate shutdown)
          -> xlog_force_shutdown
          -> return

unmount
  -> xfs_log_umount
      -> xlog_wait_iclog_completion
          -> down(&iclog->ic_sema) --------> HANG

There is a second early return / shutdown. Make sure the up() happens
for it as well. Also make sure we cleanup the iclog state,
xlog_state_done_syncing, before dropping the iclog lock.

Fixes: b5d721ea ("xfs: external logs need to flush data device")
Fixes: 842a42d1 ("xfs: shutdown on failure to add page to log bio")
Fixes: 7d839e32 ("xfs: check return codes when flushing block devices")
Signed-off-by: default avatarLeah Rumancik <leah.rumancik@gmail.com>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
Signed-off-by: default avatarCatherine Hoang <catherine.hoang@oracle.com>
Acked-by: default avatarChandan Babu R <chandanbabu@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 767a94d8
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment