From: Wendy Cheng <[email protected]> This should have been part of the NFS patch #1 but somehow I missed it when packaging the patches. It is not a critical issue as the others (I hope). RHEL 5.1 31.el5 kernel runs fine without this change. Our truncate code is chopped into two parts, one for vfs inode changes (in vmtruncate()) and one of gfs inode (in gfs2_truncatei()). These two operatons are, unfortunately, not atomic. So it could happens that vmtruncate() succeeds (inode->i_size is changed) but gfs2_truncatei fails (say kernel temporarily out of memory). This would leave gfs inode i_di.di_size out of sync with vfs inode i_size. It will later confuse gfs2_commit_write() if a write is issued. Last time I checked, it will cause file corruption. Signed-off-by: S. Wendy Cheng <[email protected]> Signed-off-by: Steven Whitehouse <[email protected]> diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c index 84051b9..911c115 100644 --- a/fs/gfs2/ops_inode.c +++ b/fs/gfs2/ops_inode.c @@ -903,8 +903,8 @@ static int setattr_size(struct inode *inode, struct iattr *attr) } error = gfs2_truncatei(ip, attr->ia_size); - if (error) - return error; + if (error && (inode->i_size != ip->i_di.di_size)) + i_size_write(inode, ip->i_di.di_size); return error; } -- 1.5.1.2 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
- References:
- [GFS2/DLM] Pre-pull Patch Posting
- From: [email protected]
- [PATCH] [GFS2] flush the glock completely in inode_go_sync
- From: [email protected]
- [PATCH] [DLM] fix a couple of races
- From: [email protected]
- [PATCH] [GFS2] kernel changes to support new gfs2_grow command
- From: [email protected]
- [PATCH] [GFS2] Kernel changes to support new gfs2_grow command (part 2)
- From: [email protected]
- [PATCH] [GFS2] use zero_user_page
- From: [email protected]
- [PATCH] [GFS2] Addendum patch 2 for gfs2_grow
- From: [email protected]
- [PATCH] [GFS2] Reduce size of struct gdlm_lock
- From: [email protected]
- [PATCH] [GFS2] Clean up inode number handling
- From: [email protected]
- [PATCH] [GFS2] Quotas non-functional - fix bug
- From: [email protected]
- [PATCH] [DLM] keep dlm from panicing when traversing rsb list in debugfs
- From: [email protected]
- [PATCH] [DLM] block scand during recovery [1/6]
- From: [email protected]
- [PATCH] [DLM] add lock timeouts and warnings [2/6]
- From: [email protected]
- [PATCH] [DLM] dlm_device interface changes [3/6]
- From: [email protected]
- [PATCH] [DLM] cancel in conversion deadlock [4/6]
- From: [email protected]
- [PATCH] [DLM] fix new_lockspace error exit [5/6]
- From: [email protected]
- [PATCH] [DLM] wait for config check during join [6/6]
- From: [email protected]
- [PATCH] [DLM] fix compile breakage
- From: [email protected]
- [PATCH] [GFS2] latest gfs2-nmw headers break userland build
- From: [email protected]
- [PATCH] [DLM] Compile fix
- From: [email protected]
- [PATCH] [DLM] timeout fixes
- From: [email protected]
- [PATCH] [DLM] canceling deadlocked lock
- From: [email protected]
- [PATCH] [DLM] dumping master locks
- From: [email protected]
- [PATCH] [DLM] show default protocol
- From: [email protected]
- [PATCH] [GFS2] Quotas non-functional - fix another bug
- From: [email protected]
- [PATCH] [GFS2] Make the log reserved blocks depend on block size
- From: [email protected]
- [PATCH] [DLM] fix socket shutdown
- From: [email protected]
- [PATCH] [GFS2] fix jdata issues
- From: [email protected]
- [PATCH] [GFS2] Fix sign problem in quota/statfs and cleanup _host structures
- From: [email protected]
- [PATCH] [GFS2] Add nanosecond timestamp feature
- From: [email protected]
- [PATCH] [DLM] fix reference counting
- From: [email protected]
- [PATCH] [DLM] variable allocation
- From: [email protected]
- [PATCH] [GFS2] Fix typo in rename of directories
- From: [email protected]
- [PATCH] [GFS2] Fix bug in error path of inode
- From: [email protected]
- [PATCH] [GFS2] Can't mount GFS2 file system on AoE device
- From: [email protected]
- [PATCH] [GFS2] Recovery for lost unlinked inodes
- From: [email protected]
- [PATCH] [GFS2] gfs2_lookupi() uninitialised var fix
- From: [email protected]
- [PATCH] [GFS2] set plock owner in GETLK info
- From: [email protected]
- [PATCH] [GFS2] return conflicts for GETLK
- From: [email protected]
- [PATCH] [GFS2] Fix deallocation issues
- From: [email protected]
- [PATCH] [DLM] don't require FS flag on all nodes
- From: [email protected]
- [PATCH] [GFS2] Journaled file write/unstuff bug
- From: [email protected]
- [PATCH] [GFS2] Remove bogus '\0' in rgrp.c
- From: [email protected]
- [PATCH] [GFS2] Use zero_user_page() in stuffed_readpage()
- From: [email protected]
- [PATCH] [GFS2] assertion failure after writing to journaled file, umount
- From: [email protected]
- [PATCH] [GFS2] Simplify multiple glock aquisition
- From: [email protected]
- [PATCH] [GFS2] Addendum to the journaled file/unmount patch
- From: [email protected]
- [PATCH] [GFS2] Fix gfs2_block_truncate_page err return
- From: [email protected]
- [PATCH] [DLM] Telnet to port 21064 can stop all lockspaces
- From: [email protected]
- [GFS2/DLM] Pre-pull Patch Posting
- Prev by Date: [PATCH] [DLM] Telnet to port 21064 can stop all lockspaces
- Next by Date: [PATCH] [GFS2] remounting w/o acl option leaves acls enabled
- Previous by thread: [PATCH] [DLM] Telnet to port 21064 can stop all lockspaces
- Next by thread: [PATCH] [GFS2] remounting w/o acl option leaves acls enabled
- Index(es):