eCryptfs: fix write zeros behavior
This patch fixes the processes involved in wiping regions of the data during truncate and write events, fixing a kernel hang in 2.6.22-rc4 while assuring that zero values are written out to the appropriate locations during events in which the i_size will change. The range passed to ecryptfs_truncate() from ecryptfs_prepare_write() includes the page that is the object of ecryptfs_prepare_write(). This leads to a kernel hang as read_cache_page() is executed on the same page in the ecryptfs_truncate() execution path. This patch remedies this by limiting the range passed to ecryptfs_truncate() so as to exclude the page that is the object of ecryptfs_prepare_write(); it also adds code to ecryptfs_prepare_write() to zero out the region of its own page when writing past the i_size position. This patch also modifies ecryptfs_truncate() so that when a file is truncated to a smaller size, eCryptfs will zero out the contents of the new last page from the new size through to the end of the last page. Signed-off-by: Michael Halcrow <mhalcrow@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b75ae86035
commit
240e2df5c7
3 changed files with 50 additions and 24 deletions
|
|
@ -580,5 +580,7 @@ void
|
|||
ecryptfs_write_header_metadata(char *virt,
|
||||
struct ecryptfs_crypt_stat *crypt_stat,
|
||||
size_t *written);
|
||||
int ecryptfs_write_zeros(struct file *file, pgoff_t index, int start,
|
||||
int num_zeros);
|
||||
|
||||
#endif /* #ifndef ECRYPTFS_KERNEL_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue