diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-03 10:58:56 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-03 10:58:56 -0800 |
commit | 50d0f78f5c736e974188d72bf9317971e37e69b0 (patch) | |
tree | 1f830d8b20238a888201bdb9cf4c6b4f3790e26e /fs/afs/write.c | |
parent | b4df268dd4031fd2f8729e7650bc516a0a5f315b (diff) | |
parent | afae457d874860a7e299d334f59eede5f3ad4b47 (diff) | |
download | linux-50d0f78f5c736e974188d72bf9317971e37e69b0.tar.gz linux-50d0f78f5c736e974188d72bf9317971e37e69b0.tar.xz |
Merge branch 'afs-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs
Pull afs/fscache fixes from David Howells:
- Fix the default return of fscache_maybe_release_page() when a cache
isn't in use - it prevents a filesystem from releasing pages. This
can cause a system to OOM.
- Fix a potential uninitialised variable in AFS.
- Fix AFS unlink's handling of the nlink count. It needs to use the
nlink manipulation functions so that inode structs of deleted inodes
actually get scheduled for destruction.
- Fix error handling in afs_write_end() so that the page gets unlocked
and put if we can't fill the unwritten portion.
* 'afs-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs:
afs: Fix missing error handling in afs_write_end()
afs: Fix unlink
afs: Potential uninitialized variable in afs_extract_data()
fscache: Fix the default for fscache_maybe_release_page()
Diffstat (limited to 'fs/afs/write.c')
-rw-r--r-- | fs/afs/write.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/afs/write.c b/fs/afs/write.c index cb5f8a3df577..9370e2feb999 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c @@ -198,7 +198,7 @@ int afs_write_end(struct file *file, struct address_space *mapping, ret = afs_fill_page(vnode, key, pos + copied, len - copied, page); if (ret < 0) - return ret; + goto out; } SetPageUptodate(page); } @@ -206,10 +206,12 @@ int afs_write_end(struct file *file, struct address_space *mapping, set_page_dirty(page); if (PageDirty(page)) _debug("dirtied"); + ret = copied; + +out: unlock_page(page); put_page(page); - - return copied; + return ret; } /* |