Patch "excessive checks in ufs_write_failed() and ufs_evict_inode()" has been added to the 4.11-stable tree
This is a note to let you know that I've just added the patch titled
excessive checks in ufs_write_failed() and ufs_evict_inode()
to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
excessive-checks-in-ufs_write_failed-and-ufs_evict_inode.patch
and it can be found in the queue-4.11 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
babef37dccbaa49249a22bae9150686815d7be71Mon Sep 17 00:00:00 2001
From: Al Viro <[email protected]>
Date: Fri, 9 Jun 2017 16:20:34 -0400
Subject: excessive checks in ufs_write_failed() and ufs_evict_inode()
From: Al Viro <[email protected]>
commit babef37dccbaa49249a22bae9150686815d7be71 upstream.
As it is, short copy in write() to append-only file will fail to truncate the excessive allocated blocks. As the matter of fact, all checks in ufs_truncate_blocks() are either redundant or wrong for that caller. As for the only other caller (ufs_evict_inode()), we only need the file type checks there.
--- fs/ufs/inode.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-)
fs/ufs/inode.c +5 -13
@@ -844,7 +844,9 @@ void ufs_evict_inode(struct inode * inodtruncate_inode_pages_final (&inode->i_data);if (want_delete) { inode->i_size =0 ; -if (inode->i_blocks) +if (inode->i_blocks && + (S_ISREG (inode->i_mode) ||S_ISDIR (inode->i_mode) || +S_ISLNK (inode->i_mode)))ufs_truncate_blocks (inode); }
@@ -1103,7 +1105,7 @@ out:return err; } -static void __ufs_truncate_blocks (struct inode *inode) +static void ufs_truncate_blocks (struct inode *inode) {struct ufs_inode_info *ufsi =UFS_I (inode);struct super_block *sb = inode->i_sb;
@@ -1186,7 +1188,7 @@ static int ufs_truncate(struct inode *intruncate_setsize (inode, size); -__ufs_truncate_blocks (inode); +ufs_truncate_blocks (inode); inode->i_mtime = inode->i_ctime =current_time (inode);mark_inode_dirty (inode); out:
@@ -1194,16 +1196,6 @@ out:return err; } -static void ufs_truncate_blocks (struct inode *inode) -{ -if (!(S_ISREG (inode->i_mode) ||S_ISDIR (inode->i_mode) || -S_ISLNK (inode->i_mode))) -return ; -if (IS_APPEND (inode) ||IS_IMMUTABLE (inode)) -return ; -__ufs_truncate_blocks (inode); -} -int ufs_setattr (struct dentry *dentry,struct iattr *attr) {struct inode *inode =d_inode (dentry);
Patches currently in stable-queue which might be from [email protected] are
queue-4.11/excessive-checks-in-ufs_write_failed-and-ufs_evict_inode.patch queue-4.11/ufs-set-correct-s_maxsize.patch queue-4.11/ufs_getfrag_block-we-only-grab-truncate_mutex-on-block-creation-path.patch queue-4.11/ufs-restore-proper-tail-allocation.patch queue-4.11/ufs_extend_tail-fix-the-braino-in-calling-conventions-of-ufs_new_fragments.patch queue-4.11/ufs-restore-maintaining-i_blocks.patch queue-4.11/fix-ufs_isblockset.patch