From: Josef Bacik <jbacik@fb.com>
To: linux-xfs@vger.kernel.org, darrick.wong@oracle.com, kernel-team@fb.com
Subject: [PATCH] xfs: clear XBF_ASYNC if we attach an iodone callback
Date: Fri, 3 Mar 2017 09:46:44 -0500 [thread overview]
Message-ID: <1488552404-21379-1-git-send-email-jbacik@fb.com> (raw)
While testing nbd disconnects I kept hitting the following hang
Call Trace:
schedule+0x35/0x80
xfs_ail_push_all_sync+0xa3/0xe0
? prepare_to_wait_event+0x100/0x100
xfs_unmountfs+0x57/0x190
xfs_fs_put_super+0x32/0x90
generic_shutdown_super+0x6f/0xf0
kill_block_super+0x27/0x70
deactivate_locked_super+0x3e/0x70
deactivate_super+0x46/0x60
cleanup_mnt+0x3f/0x80
__cleanup_mnt+0x12/0x20
task_work_run+0x86/0xb0
exit_to_usermode_loop+0x6d/0x96
do_syscall_64+0x8b/0xa0
entry_SYSCALL64_slow_path+0x25/0x25
After some digging around I found that there was a log item on the ail
with a callback of xfs_iflush_done. A printk confirmed that at the call
to xfs_buf_attach_iodone in xfs_iflush_int had XBF_ASYNC already set,
which means on error we do not call xfs_buf_do_callbacks, which leaves
the log item on the ail list which causes us to hang on unmount. I
assume the block has XBF_ASYNC set because we did a readahead on it, so
it doesn't really need to have XBF_ASYNC set at this point as we do
actually care about what happens to the buffer once IO is complete.
With this patch my hang no longer happens.
Signed-off-by: Josef Bacik <jbacik@fb.com>
---
fs/xfs/xfs_buf_item.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
index 2975cb2..24fcb67 100644
--- a/fs/xfs/xfs_buf_item.c
+++ b/fs/xfs/xfs_buf_item.c
@@ -1016,6 +1016,11 @@ xfs_buf_attach_iodone(
ASSERT(bp->b_iodone == NULL ||
bp->b_iodone == xfs_buf_iodone_callbacks);
+ /*
+ * Somebody now cares about the fate of this buffer, clear XBF_ASYNC so
+ * that the iodone callback actually gets called.
+ */
+ bp->b_flags &= ~XBF_ASYNC;
bp->b_iodone = xfs_buf_iodone_callbacks;
}
--
2.5.5
next reply other threads:[~2017-03-03 14:46 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-03 14:46 Josef Bacik [this message]
2017-03-03 20:49 ` [PATCH] xfs: clear XBF_ASYNC if we attach an iodone callback Brian Foster
2017-03-03 21:34 ` Josef Bacik
2017-03-03 22:20 ` Brian Foster
2017-03-04 1:26 ` Josef Bacik
2017-03-04 13:58 ` Brian Foster
2017-03-06 19:00 ` Josef Bacik
2017-03-07 1:22 ` Dave Chinner
2017-03-07 2:37 ` Josef Bacik
2017-03-07 15:56 ` Josef Bacik
2017-03-07 16:12 ` Brian Foster
2017-04-03 9:19 ` Carlos Maiolino
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1488552404-21379-1-git-send-email-jbacik@fb.com \
--to=jbacik@fb.com \
--cc=darrick.wong@oracle.com \
--cc=kernel-team@fb.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).