Here's a set of fixes for AFS: (1) Fix copy_file_range() to an afs file now returning EINVAL if the splice_write file op isn't supplied. (2) Fix a deref-before-check in afs_unuse_cell(). (3) Fix a use-after-free in afs_xattr_get_acl(). (4) Fix afs to not try to clear PG_writeback when laundering a page. (5) Fix afs to take a ref on a page that it sets PG_private on and to drop that ref when clearing PG_private. (6) Fix a page leak if write_begin() fails. (7) Fix afs_write_begin() to not alter the dirty region info stored in page->private, but rather do this in afs_write_end() instead when we know what we actually changed. (8) Fix afs_invalidatepage() to alter the dirty region info on a page when partial page invalidation occurs so that we don't inadvertantly include a span of zeros that will get written back if a page gets laundered due to a remote 3rd-party induced invalidation. We mustn't, however, reduce the dirty region if the page has been seen to be mapped (ie. we got called through the page_mkwrite vector) as the page might still be mapped and we might lose data if the file is extended again. To aid (8), two additional patches are included: (*) Wrap the manipulations of the dirty region info stored in page->private into helper functions. (*) Alter the encoding of the dirty region so that the region bounds can be stored with one fewer bit, making a bit available for the indication of mappedness. The patches can be found here: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=afs-fixes David --- Dan Carpenter (1): afs: Fix a use after free in afs_xattr_get_acl() David Howells (9): afs: Fix copy_file_range() afs: Fix tracing deref-before-check afs: Fix afs_launder_page to not clear PG_writeback afs: Fix to take ref on page when PG_private is set afs: Fix page leak on afs_write_begin() failure afs: Fix where page->private is set during write afs: Wrap page->private manipulations in inline functions afs: Alter dirty range encoding in page->private afs: Fix afs_invalidatepage to adjust the dirty region fs/afs/cell.c | 3 +- fs/afs/dir.c | 3 ++ fs/afs/dir_edit.c | 1 + fs/afs/file.c | 74 ++++++++++++++++++++++++----- fs/afs/internal.h | 41 ++++++++++++++++ fs/afs/write.c | 95 ++++++++++++++++++++++---------------- fs/afs/xattr.c | 2 +- include/linux/page-flags.h | 1 + include/trace/events/afs.h | 20 ++------ 9 files changed, 171 insertions(+), 69 deletions(-)