Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 007f6c3a authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'ecryptfs-3.8-rc2-fixes' of...

Merge tag 'ecryptfs-3.8-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tyhicks/ecryptfs

Pull ecryptfs fixes from Tyler Hicks:
 "Two self-explanatory fixes and a third patch which improves
  performance: when overwriting a full page in the eCryptfs page cache,
  skip reading in and decrypting the corresponding lower page."

* tag 'ecryptfs-3.8-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tyhicks/ecryptfs:
  fs/ecryptfs/crypto.c: make ecryptfs_encode_for_filename() static
  eCryptfs: fix to use list_for_each_entry_safe() when delete items
  eCryptfs: Avoid unnecessary disk read and data decryption during writing
parents 58890c06 37028758
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -1935,7 +1935,7 @@ static const unsigned char filename_rev_map[256] = {
 * @src: Source location for the filename to encode
 * @src: Source location for the filename to encode
 * @src_size: Size of the source in bytes
 * @src_size: Size of the source in bytes
 */
 */
void ecryptfs_encode_for_filename(unsigned char *dst, size_t *dst_size,
static void ecryptfs_encode_for_filename(unsigned char *dst, size_t *dst_size,
				  unsigned char *src, size_t src_size)
				  unsigned char *src, size_t src_size)
{
{
	size_t num_blocks;
	size_t num_blocks;
+3 −3
Original line number Original line Diff line number Diff line
@@ -102,11 +102,11 @@ int __init ecryptfs_init_kthread(void)


void ecryptfs_destroy_kthread(void)
void ecryptfs_destroy_kthread(void)
{
{
	struct ecryptfs_open_req *req;
	struct ecryptfs_open_req *req, *tmp;


	mutex_lock(&ecryptfs_kthread_ctl.mux);
	mutex_lock(&ecryptfs_kthread_ctl.mux);
	ecryptfs_kthread_ctl.flags |= ECRYPTFS_KTHREAD_ZOMBIE;
	ecryptfs_kthread_ctl.flags |= ECRYPTFS_KTHREAD_ZOMBIE;
	list_for_each_entry(req, &ecryptfs_kthread_ctl.req_list,
	list_for_each_entry_safe(req, tmp, &ecryptfs_kthread_ctl.req_list,
				 kthread_ctl_list) {
				 kthread_ctl_list) {
		list_del(&req->kthread_ctl_list);
		list_del(&req->kthread_ctl_list);
		*req->lower_file = ERR_PTR(-EIO);
		*req->lower_file = ERR_PTR(-EIO);
+10 −2
Original line number Original line Diff line number Diff line
@@ -338,7 +338,8 @@ static int ecryptfs_write_begin(struct file *file,
			if (prev_page_end_size
			if (prev_page_end_size
			    >= i_size_read(page->mapping->host)) {
			    >= i_size_read(page->mapping->host)) {
				zero_user(page, 0, PAGE_CACHE_SIZE);
				zero_user(page, 0, PAGE_CACHE_SIZE);
			} else {
				SetPageUptodate(page);
			} else if (len < PAGE_CACHE_SIZE) {
				rc = ecryptfs_decrypt_page(page);
				rc = ecryptfs_decrypt_page(page);
				if (rc) {
				if (rc) {
					printk(KERN_ERR "%s: Error decrypting "
					printk(KERN_ERR "%s: Error decrypting "
@@ -348,10 +349,10 @@ static int ecryptfs_write_begin(struct file *file,
					ClearPageUptodate(page);
					ClearPageUptodate(page);
					goto out;
					goto out;
				}
				}
			}
				SetPageUptodate(page);
				SetPageUptodate(page);
			}
			}
		}
		}
	}
	/* If creating a page or more of holes, zero them out via truncate.
	/* If creating a page or more of holes, zero them out via truncate.
	 * Note, this will increase i_size. */
	 * Note, this will increase i_size. */
	if (index != 0) {
	if (index != 0) {
@@ -499,6 +500,13 @@ static int ecryptfs_write_end(struct file *file,
		}
		}
		goto out;
		goto out;
	}
	}
	if (!PageUptodate(page)) {
		if (copied < PAGE_CACHE_SIZE) {
			rc = 0;
			goto out;
		}
		SetPageUptodate(page);
	}
	/* Fills in zeros if 'to' goes beyond inode size */
	/* Fills in zeros if 'to' goes beyond inode size */
	rc = fill_zeros_to_end_of_page(page, to);
	rc = fill_zeros_to_end_of_page(page, to);
	if (rc) {
	if (rc) {