diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/udf/file.c | 35 | ||||
| -rw-r--r-- | fs/udf/inode.c | 13 | 
2 files changed, 22 insertions, 26 deletions
diff --git a/fs/udf/file.c b/fs/udf/file.c index 5d7a4ea2775..7c7a1b39d56 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -76,36 +76,29 @@ static int udf_adinicb_writepage(struct page *page, struct writeback_control *wb  	return 0;  } -static int udf_adinicb_prepare_write(struct file *file, struct page *page, -				     unsigned offset, unsigned to) +static int udf_adinicb_write_end(struct file *file, +			struct address_space *mapping, +			loff_t pos, unsigned len, unsigned copied, +			struct page *page, void *fsdata)  { -	kmap(page); -	return 0; -} - -static int udf_adinicb_commit_write(struct file *file, struct page *page, -				    unsigned offset, unsigned to) -{ -	struct inode *inode = page->mapping->host; -	char *kaddr = page_address(page); +	struct inode *inode = mapping->host; +	unsigned offset = pos & (PAGE_CACHE_SIZE - 1); +	char *kaddr; +	kaddr = kmap_atomic(page, KM_USER0);  	memcpy(UDF_I_DATA(inode) + UDF_I_LENEATTR(inode) + offset, -	       kaddr + offset, to - offset); -	mark_inode_dirty(inode); -	SetPageUptodate(page); -	kunmap(page); -	/* only one page here */ -	if (to > inode->i_size) -		inode->i_size = to; -	return 0; +		kaddr + offset, copied); +	kunmap_atomic(kaddr, KM_USER0); + +	return simple_write_end(file, mapping, pos, len, copied, page, fsdata);  }  const struct address_space_operations udf_adinicb_aops = {  	.readpage	= udf_adinicb_readpage,  	.writepage	= udf_adinicb_writepage,  	.sync_page	= block_sync_page, -	.prepare_write	= udf_adinicb_prepare_write, -	.commit_write	= udf_adinicb_commit_write, +	.write_begin = simple_write_begin, +	.write_end = udf_adinicb_write_end,  };  static ssize_t udf_file_aio_write(struct kiocb *iocb, const struct iovec *iov, diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 1652b2c665b..6ff8151984c 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -133,10 +133,13 @@ static int udf_readpage(struct file *file, struct page *page)  	return block_read_full_page(page, udf_get_block);  } -static int udf_prepare_write(struct file *file, struct page *page, -			     unsigned from, unsigned to) +static int udf_write_begin(struct file *file, struct address_space *mapping, +			loff_t pos, unsigned len, unsigned flags, +			struct page **pagep, void **fsdata)  { -	return block_prepare_write(page, from, to, udf_get_block); +	*pagep = NULL; +	return block_write_begin(file, mapping, pos, len, flags, pagep, fsdata, +				udf_get_block);  }  static sector_t udf_bmap(struct address_space *mapping, sector_t block) @@ -148,8 +151,8 @@ const struct address_space_operations udf_aops = {  	.readpage	= udf_readpage,  	.writepage	= udf_writepage,  	.sync_page	= block_sync_page, -	.prepare_write	= udf_prepare_write, -	.commit_write	= generic_commit_write, +	.write_begin		= udf_write_begin, +	.write_end		= generic_write_end,  	.bmap		= udf_bmap,  };  |