There is no serialisation between NFS asynchronous writebacks
and truncation at the page level due to the fact that nfs_sync_inode()
cannot lock the pages that it is about to write out.
This means that it is possible to be flushing out data (and calling something
like set_page_writeback()) while the page cache is busy evicting the page.
Fix: Backport of upstream cherry pick cd52ed35535ef443f08bf5cd3331d350272885b8
Testcases:
1. Dapper Kernel always freezes when it mounts nfsv4 filesystems
and
2. Virtual vmware machines are on a nfs mounted filesystem. One vmware
machine goes unuseable and comsumes all the CPU time. A kill -KILL pid
doesn't wipe out the vmware process. A ls -lh on the nfs mount hangs.
and
3. Create file i/o's in a virtual host, for example copy folder to other
and kernel BUG in lib/radix-tree.c occurs.
SRU justification:
Impact: Kernel BUG in lib/radix- tree.c: 372.
There is no serialisation between NFS asynchronous writebacks
and truncation at the page level due to the fact that nfs_sync_inode()
cannot lock the pages that it is about to write out.
This means that it is possible to be flushing out data (and calling something writeback( )) while the page cache is busy evicting the page.
like set_page_
Fix: Backport of upstream cherry pick cd52ed35535ef44 3f08bf5cd3331d3 50272885b8
Testcases:
1. Dapper Kernel always freezes when it mounts nfsv4 filesystems
and
2. Virtual vmware machines are on a nfs mounted filesystem. One vmware
machine goes unuseable and comsumes all the CPU time. A kill -KILL pid
doesn't wipe out the vmware process. A ls -lh on the nfs mount hangs.
and
3. Create file i/o's in a virtual host, for example copy folder to other
and kernel BUG in lib/radix-tree.c occurs.