Loading fs/cifs/inode.c +9 −0 Original line number Diff line number Diff line Loading @@ -1377,8 +1377,17 @@ static int cifs_vmtruncate(struct inode *inode, loff_t offset) } i_size_write(inode, offset); spin_unlock(&inode->i_lock); /* * unmap_mapping_range is called twice, first simply for efficiency * so that truncate_inode_pages does fewer single-page unmaps. However * after this first call, and before truncate_inode_pages finishes, * it is possible for private pages to be COWed, which remain after * truncate_inode_pages finishes, hence the second unmap_mapping_range * call must be made for correctness. */ unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1); truncate_inode_pages(mapping, offset); unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1); goto out_truncate; do_expand: Loading Loading
fs/cifs/inode.c +9 −0 Original line number Diff line number Diff line Loading @@ -1377,8 +1377,17 @@ static int cifs_vmtruncate(struct inode *inode, loff_t offset) } i_size_write(inode, offset); spin_unlock(&inode->i_lock); /* * unmap_mapping_range is called twice, first simply for efficiency * so that truncate_inode_pages does fewer single-page unmaps. However * after this first call, and before truncate_inode_pages finishes, * it is possible for private pages to be COWed, which remain after * truncate_inode_pages finishes, hence the second unmap_mapping_range * call must be made for correctness. */ unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1); truncate_inode_pages(mapping, offset); unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1); goto out_truncate; do_expand: Loading