mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	btrfs: move pos increment and pagecache extension to btrfs_buffered_write
While we do this, correct the call to pagecache_isize_extended: - pagecache_isize_extended needs to be called to the start of the write as opposed to i_size - we don't need to check range before the call, this is done in the function Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
		
							parent
							
								
									4e4cabece9
								
							
						
					
					
						commit
						5e8b9ef303
					
				
					 1 changed files with 5 additions and 8 deletions
				
			
		|  | @ -1581,6 +1581,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, | |||
| 	int ret = 0; | ||||
| 	bool only_release_metadata = false; | ||||
| 	bool force_page_uptodate = false; | ||||
| 	loff_t old_isize = i_size_read(inode); | ||||
| 
 | ||||
| 	nrptrs = min(DIV_ROUND_UP(iov_iter_count(i), PAGE_SIZE), | ||||
| 			PAGE_SIZE / (sizeof(struct page *))); | ||||
|  | @ -1779,6 +1780,10 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, | |||
| 	} | ||||
| 
 | ||||
| 	extent_changeset_free(data_reserved); | ||||
| 	if (num_written > 0) { | ||||
| 		pagecache_isize_extended(inode, old_isize, iocb->ki_pos); | ||||
| 		iocb->ki_pos += num_written; | ||||
| 	} | ||||
| 	return num_written ? num_written : ret; | ||||
| } | ||||
| 
 | ||||
|  | @ -1901,7 +1906,6 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb, | |||
| 	loff_t pos; | ||||
| 	size_t count; | ||||
| 	loff_t oldsize; | ||||
| 	int clean_page = 0; | ||||
| 
 | ||||
| 	if (!(iocb->ki_flags & IOCB_DIRECT) && | ||||
| 	    (iocb->ki_flags & IOCB_NOWAIT)) | ||||
|  | @ -1983,8 +1987,6 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb, | |||
| 			inode_unlock(inode); | ||||
| 			goto out; | ||||
| 		} | ||||
| 		if (start_pos > round_up(oldsize, fs_info->sectorsize)) | ||||
| 			clean_page = 1; | ||||
| 	} | ||||
| 
 | ||||
| 	if (sync) | ||||
|  | @ -2027,11 +2029,6 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb, | |||
| 		current->journal_info = NULL; | ||||
| 	} else { | ||||
| 		num_written = btrfs_buffered_write(iocb, from); | ||||
| 		if (num_written > 0) | ||||
| 			iocb->ki_pos = pos + num_written; | ||||
| 		if (clean_page) | ||||
| 			pagecache_isize_extended(inode, oldsize, | ||||
| 						i_size_read(inode)); | ||||
| 	} | ||||
| 
 | ||||
| 	inode_unlock(inode); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Goldwyn Rodrigues
						Goldwyn Rodrigues