Re: 2.6.29.4: hibernation fails with large kernel trace

Miklos Szeredi
2009-05-28T06:42:17Z

On Wed, 27 May 2009, Andrew Morton wrote:
> The process "fuser" is stuck down in the fuse code awaiting a response
> or something. I'd suspect that this is the cause of the freezing
> failure:

Yup, the 'gvfs-fuse-daemon' process is already in the refrigerator, so
it cannot complete the request from the 'fuser' process.

The solution is simple, really: just allow the 'fuser' task to freeze
despite the fact that it's inside a syscall. There's the small detail
of actually implementing this, without breaking everything else...

What complicates the above is that we need to enable freezing not just
inside fuse callbacks, but in the VFS as well. E.g. sys_rename()
sleeping on i_mutex needs to be freezable as well, otherwise another
thread that is already frozen and holding that i_mutex will block that
rename.

So,

a) we need some sort of mechanism to selectively disable freezing only
for those syscalls which might (directly) touch hardware state. It
_hopefully_ should be enough to do so with read, write and ioctl,

b) we need to re-enable freezing for these in fuse.

That's the theory. I promised a prototype some time ago but haven't
yet got around to doing it.

Thanks,
Miklos