On Fri, Jun 14, 2013 at 09:15:04PM +0400, Vlad Bespalov wrote:
> i`m running an xfs filesystem over device going offline/online and
> sometimes offline may be done in parallel with unmounting
>
> at some point i got several crashes with null pointer panic in
> xlog_iodone: xlog_t structure taken from input buffer is null
>
> i wonder if the following call path combined with disk online/offline
> handling could have led to this crash:
>
> --------------
> xfs_unmountfs()
> xfs_log_unmount_write(mp)
> xlog_state_release_iclog(log)
> xlog_sync(log, iclog = log->l_iclog)
> (bp=iclog->ic_bp)
> xlog_bdstrat(bp)
> (iclog->ic_state != XLOG_STATE_ERROR ? )
> xfs_buf_iorequest(bp)
> xfs_buf_ioend (called with scheduling (*) )
> (queues : bp->b_iodone_work,
> callback: xlog_iodone)
Which is followed by:
if (!(iclog->ic_state == XLOG_STATE_ACTIVE ||
iclog->ic_state == XLOG_STATE_DIRTY)) {
if (!XLOG_FORCED_SHUTDOWN(log)) {
xlog_wait(&iclog->ic_force_wait,
&log->l_icloglock)
Which is supposed to wait for the log IO to complete and hence
xlog_iodone() is supposed to have been run by the time this code
completes.
What kernel are you tesing on? Do you have a script that reproduces
it?
Cheers,
Dave.
--
Dave Chinner
david@xxxxxxxxxxxxx
|