mirror of https://gitee.com/openkylin/linux.git
fix data corruption on NFS writeback
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJS080OAAoJECvKgwp+S8JaIdUQAJKNZTzXKylUjUZty42t57Jh 1qRrQeJ6ha+JVSpYX4jJz/mSzUdJdjoFg7J3O54OnVFj/CnlcY7GRZj3VMel9ijf uhlf8DcU6JsThcFK4Q6mqXtdAHDPkQ1jkQHLNCe7bow9AjCzHymAZWJix4YvEsXF zeJJURMqSaJeo/44MynnXyn/h5RRhg+5HWErhoFiVUzDzHR3RoQqmt3lPVVJkdj1 iokHLMzGui2vs52vUJj2yx7m9kaoDx/6bJpqR61qHfk5S4wjLkUI+1ID8dsTNVF2 4O3THb0nUDWx4wuJIxrAKoPiYjiemX1KmQXlUVr3IsfhDiiBbLyviVyn4aRaFIxV IRCVXCj1CWw+cFLeCA5E+/WvpxjLfKs4WNBxIqjes5YRPM4PLpU3MDiabssaUzHI 0VPbU8TQ05hqH0wbs0hIgXyvED6yNn9d3sPHS2Lb5i2tp3E0FzVEoh2EH2jn8lmQ 1DAdi+ezk9EiJs8AFiN6MSIBpAZosX3Nq+RTmYGKqLZMGnxlJ30YspNlipiBPFpC 4xokkMZAZ0+wzpVabOMie36Rc/AaOAqiOjS1C6UIoOSrBTgtwWL7Ft2Da3SKb0KX XQhNWCHNYcgOn9/DDDmGxzwt6HsEzOIYinMwrG37LSass5KEvopssmiLCXn8wry+ QXUoiFFFAPpg8iXaqj4X =AHdo -----END PGP SIGNATURE----- Merge tag 'writeback-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux Pull writeback fix from Wu Fengguang: "Fix data corruption on NFS writeback. It has been in linux-next for one month" * tag 'writeback-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux: writeback: Fix data corruption on NFS
This commit is contained in:
commit
70b23ce347
|
@ -516,13 +516,16 @@ writeback_single_inode(struct inode *inode, struct bdi_writeback *wb,
|
|||
}
|
||||
WARN_ON(inode->i_state & I_SYNC);
|
||||
/*
|
||||
* Skip inode if it is clean. We don't want to mess with writeback
|
||||
* lists in this function since flusher thread may be doing for example
|
||||
* sync in parallel and if we move the inode, it could get skipped. So
|
||||
* here we make sure inode is on some writeback list and leave it there
|
||||
* unless we have completely cleaned the inode.
|
||||
* Skip inode if it is clean and we have no outstanding writeback in
|
||||
* WB_SYNC_ALL mode. We don't want to mess with writeback lists in this
|
||||
* function since flusher thread may be doing for example sync in
|
||||
* parallel and if we move the inode, it could get skipped. So here we
|
||||
* make sure inode is on some writeback list and leave it there unless
|
||||
* we have completely cleaned the inode.
|
||||
*/
|
||||
if (!(inode->i_state & I_DIRTY))
|
||||
if (!(inode->i_state & I_DIRTY) &&
|
||||
(wbc->sync_mode != WB_SYNC_ALL ||
|
||||
!mapping_tagged(inode->i_mapping, PAGECACHE_TAG_WRITEBACK)))
|
||||
goto out;
|
||||
inode->i_state |= I_SYNC;
|
||||
spin_unlock(&inode->i_lock);
|
||||
|
|
Loading…
Reference in New Issue