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

Commit c0968ab4 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "[ANDROID] f2fs: Set the bio REQ_NOENCRYPT flag"

parents 6596f440 01129d26
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -131,7 +131,7 @@ int fscrypt_zeroout_range(const struct inode *inode, pgoff_t lblk,
		bio_set_dev(bio, inode->i_sb->s_bdev);
		bio_set_dev(bio, inode->i_sb->s_bdev);
		bio->bi_iter.bi_sector =
		bio->bi_iter.bi_sector =
			pblk << (inode->i_sb->s_blocksize_bits - 9);
			pblk << (inode->i_sb->s_blocksize_bits - 9);
		bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
		bio_set_op_attrs(bio, REQ_OP_WRITE, REQ_NOENCRYPT);
		ret = bio_add_page(bio, ciphertext_page,
		ret = bio_add_page(bio, ciphertext_page,
					inode->i_sb->s_blocksize, 0);
					inode->i_sb->s_blocksize, 0);
		if (ret != inode->i_sb->s_blocksize) {
		if (ret != inode->i_sb->s_blocksize) {
+3 −0
Original line number Original line Diff line number Diff line
@@ -216,7 +216,10 @@ typedef struct ext4_io_end {
	ssize_t			size;		/* size of the extent */
	ssize_t			size;		/* size of the extent */
} ext4_io_end_t;
} ext4_io_end_t;


#define EXT4_IO_ENCRYPTED	1

struct ext4_io_submit {
struct ext4_io_submit {
	unsigned int		io_flags;
	struct writeback_control *io_wbc;
	struct writeback_control *io_wbc;
	struct bio		*io_bio;
	struct bio		*io_bio;
	ext4_io_end_t		*io_end;
	ext4_io_end_t		*io_end;
+9 −6
Original line number Original line Diff line number Diff line
@@ -1216,11 +1216,12 @@ static int ext4_block_write_begin(struct page *page, loff_t pos, unsigned len,
		if (!buffer_uptodate(bh) && !buffer_delay(bh) &&
		if (!buffer_uptodate(bh) && !buffer_delay(bh) &&
		    !buffer_unwritten(bh) &&
		    !buffer_unwritten(bh) &&
		    (block_start < from || block_end > to)) {
		    (block_start < from || block_end > to)) {
			ll_rw_block(REQ_OP_READ, 0, 1, &bh);
			*wait_bh++ = bh;
			decrypt = ext4_encrypted_inode(inode) &&
			decrypt = ext4_encrypted_inode(inode) &&
				S_ISREG(inode->i_mode) &&
				S_ISREG(inode->i_mode) &&
				!fscrypt_using_hardware_encryption(inode);
				!fscrypt_using_hardware_encryption(inode);
			ll_rw_block(REQ_OP_READ, (decrypt ? REQ_NOENCRYPT : 0),
				    1, &bh);
			*wait_bh++ = bh;
		}
		}
	}
	}
	/*
	/*
@@ -4049,6 +4050,7 @@ static int __ext4_block_zero_page_range(handle_t *handle,
	struct inode *inode = mapping->host;
	struct inode *inode = mapping->host;
	struct buffer_head *bh;
	struct buffer_head *bh;
	struct page *page;
	struct page *page;
	bool decrypt;
	int err = 0;
	int err = 0;


	page = find_or_create_page(mapping, from >> PAGE_SHIFT,
	page = find_or_create_page(mapping, from >> PAGE_SHIFT,
@@ -4091,14 +4093,15 @@ static int __ext4_block_zero_page_range(handle_t *handle,


	if (!buffer_uptodate(bh)) {
	if (!buffer_uptodate(bh)) {
		err = -EIO;
		err = -EIO;
		ll_rw_block(REQ_OP_READ, 0, 1, &bh);
		decrypt = S_ISREG(inode->i_mode) &&
			ext4_encrypted_inode(inode) &&
		    !fscrypt_using_hardware_encryption(inode);
		ll_rw_block(REQ_OP_READ, (decrypt ? REQ_NOENCRYPT : 0), 1, &bh);
		wait_on_buffer(bh);
		wait_on_buffer(bh);
		/* Uhhuh. Read error. Complain and punt. */
		/* Uhhuh. Read error. Complain and punt. */
		if (!buffer_uptodate(bh))
		if (!buffer_uptodate(bh))
			goto unlock;
			goto unlock;
		if (S_ISREG(inode->i_mode) &&
		if (decrypt) {
				ext4_encrypted_inode(inode) &&
				!fscrypt_using_hardware_encryption(inode)) {
			/* We expect the key to be set. */
			/* We expect the key to be set. */
			BUG_ON(!fscrypt_has_encryption_key(inode));
			BUG_ON(!fscrypt_has_encryption_key(inode));
			BUG_ON(blocksize != PAGE_SIZE);
			BUG_ON(blocksize != PAGE_SIZE);
+5 −0
Original line number Original line Diff line number Diff line
@@ -352,6 +352,8 @@ void ext4_io_submit(struct ext4_io_submit *io)
		int io_op_flags = io->io_wbc->sync_mode == WB_SYNC_ALL ?
		int io_op_flags = io->io_wbc->sync_mode == WB_SYNC_ALL ?
				  REQ_SYNC : 0;
				  REQ_SYNC : 0;
		io->io_bio->bi_write_hint = io->io_end->inode->i_write_hint;
		io->io_bio->bi_write_hint = io->io_end->inode->i_write_hint;
		if (io->io_flags & EXT4_IO_ENCRYPTED)
			io_op_flags |= REQ_NOENCRYPT;
		bio_set_op_attrs(io->io_bio, REQ_OP_WRITE, io_op_flags);
		bio_set_op_attrs(io->io_bio, REQ_OP_WRITE, io_op_flags);
		submit_bio(io->io_bio);
		submit_bio(io->io_bio);
	}
	}
@@ -361,6 +363,7 @@ void ext4_io_submit(struct ext4_io_submit *io)
void ext4_io_submit_init(struct ext4_io_submit *io,
void ext4_io_submit_init(struct ext4_io_submit *io,
			 struct writeback_control *wbc)
			 struct writeback_control *wbc)
{
{
	io->io_flags = 0;
	io->io_wbc = wbc;
	io->io_wbc = wbc;
	io->io_bio = NULL;
	io->io_bio = NULL;
	io->io_end = NULL;
	io->io_end = NULL;
@@ -505,6 +508,8 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
	do {
	do {
		if (!buffer_async_write(bh))
		if (!buffer_async_write(bh))
			continue;
			continue;
		if (data_page)
			io->io_flags |= EXT4_IO_ENCRYPTED;
		ret = io_submit_add_bh(io, inode,
		ret = io_submit_add_bh(io, inode,
				       data_page ? data_page : page, bh);
				       data_page ? data_page : page, bh);
		if (ret) {
		if (ret) {
+1 −0
Original line number Original line Diff line number Diff line
@@ -301,6 +301,7 @@ int ext4_mpage_readpages(struct address_space *mapping,
			bio->bi_private = ctx;
			bio->bi_private = ctx;
			if (is_readahead)
			if (is_readahead)
				flags = flags | REQ_RAHEAD;
				flags = flags | REQ_RAHEAD;
			flags = flags | (ctx ? REQ_NOENCRYPT : 0);
			bio_set_op_attrs(bio, REQ_OP_READ, flags);
			bio_set_op_attrs(bio, REQ_OP_READ, flags);
		}
		}


Loading