Re: [PATCH -mm 0/2] Use freezeable workqueues to avoid suspend-related XFS corruptions

Rafael J. Wysocki
2006-11-20T20:44:37Z

Hi,

On Monday, 20 November 2006 12:02, Nigel Cunningham wrote:
> Hi all.
>
> I've did some testing this afternoon with bdev freezing disabled and
> without any non-vanilla code to freeze kthreads (Rafael's or my older
> version).

Thanks for testing this.

> If I put a BUG_ON() in submit_bio for non suspend2 I/O, it catches this
> trace:
>
> submit_bio
> xfs_buf_iorequest
> xlog_bdstrat_cb
> xlog_state_release_iclog
> xlog_state_sync_all
> xfs_log_force
> xfs_syncsub
> xfs_sync
> vfs_sync
> vfs_sync_worker
> xfssyncd
> keventd_create_kthread

Well, this trace apparently comes from xfssyncd wich explicitly calls
try_to_freeze(). When does this happen?

> I haven't yet reproduced anything on another code path (eg pdflush).
>
> So, it would appear that freezing kthreads without freezing bdevs should
> be a possible solution. It may however leave some I/O unsynced
> pre-resume and therefore result in possible dataloss if no resume
> occurs. I therefore wonder whether it's better to stick with bdev
> freezing

It looks like xfs is the only filesystem that really implements bdev freezing,
so for other filesystems it's irrelevant. However, it may affect the dm, and
I'm not sure what happens if someone tries to use a swap file on a dm
device for the suspend _after_ we have frozen bdevs.

> or create some variant wherein XFS is taught to fully flush
> pending writes and not create new I/O.

I think we should prevent filesystems from submitting any new I/O after
processes have been frozen, this way or another.

Greetings,
Rafael

--
You never change things by fighting the existing reality.
R. Buckminster Fuller