Re: [PATCH 1/3] kill wait_on_page_writeback_range

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed 30-09-09 22:16:33, Christoph Hellwig wrote:
> 
> All callers really want the more logical filemap_fdatawait_range interface,
> so convert them to use it and merge wait_on_page_writeback_range into
> filemap_fdatawait_range.
> 
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
  Looks good. Acked-by: Jan Kara <jack@xxxxxxx>

									Honza
> 
> Index: linux-2.6/Documentation/filesystems/vfs.txt
> ===================================================================
> --- linux-2.6.orig/Documentation/filesystems/vfs.txt	2009-09-30 13:43:04.670028719 -0300
> +++ linux-2.6/Documentation/filesystems/vfs.txt	2009-09-30 13:43:11.088004004 -0300
> @@ -472,7 +472,7 @@ __sync_single_inode) to check if ->write
>  writing out the whole address_space.
>  
>  The Writeback tag is used by filemap*wait* and sync_page* functions,
> -via wait_on_page_writeback_range, to wait for all writeback to
> +via filemap_fdatawait_range, to wait for all writeback to
>  complete.  While waiting ->sync_page (if defined) will be called on
>  each page that is found to require writeback.
>  
> Index: linux-2.6/fs/jbd2/commit.c
> ===================================================================
> --- linux-2.6.orig/fs/jbd2/commit.c	2009-09-30 13:43:04.644024427 -0300
> +++ linux-2.6/fs/jbd2/commit.c	2009-09-30 13:43:11.089004202 -0300
> @@ -286,7 +286,7 @@ static int journal_finish_inode_data_buf
>  		if (err) {
>  			/*
>  			 * Because AS_EIO is cleared by
> -			 * wait_on_page_writeback_range(), set it again so
> +			 * filemap_fdatawait_range(), set it again so
>  			 * that user process can get -EIO from fsync().
>  			 */
>  			set_bit(AS_EIO,
> Index: linux-2.6/fs/sync.c
> ===================================================================
> --- linux-2.6.orig/fs/sync.c	2009-09-30 13:43:04.637021859 -0300
> +++ linux-2.6/fs/sync.c	2009-09-30 13:43:11.092004514 -0300
> @@ -452,9 +452,7 @@ int do_sync_mapping_range(struct address
>  
>  	ret = 0;
>  	if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
> -		ret = wait_on_page_writeback_range(mapping,
> -					offset >> PAGE_CACHE_SHIFT,
> -					endbyte >> PAGE_CACHE_SHIFT);
> +		ret = filemap_fdatawait_range(mapping, offset, endbyte);
>  		if (ret < 0)
>  			goto out;
>  	}
> @@ -467,9 +465,7 @@ int do_sync_mapping_range(struct address
>  	}
>  
>  	if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
> -		ret = wait_on_page_writeback_range(mapping,
> -					offset >> PAGE_CACHE_SHIFT,
> -					endbyte >> PAGE_CACHE_SHIFT);
> +		ret = filemap_fdatawait_range(mapping, offset, endbyte);
>  	}
>  out:
>  	return ret;
> Index: linux-2.6/include/linux/fs.h
> ===================================================================
> --- linux-2.6.orig/include/linux/fs.h	2009-09-30 13:43:04.663004220 -0300
> +++ linux-2.6/include/linux/fs.h	2009-09-30 13:43:11.096003767 -0300
> @@ -2086,8 +2086,6 @@ extern int filemap_fdatawait_range(struc
>  extern int filemap_write_and_wait(struct address_space *mapping);
>  extern int filemap_write_and_wait_range(struct address_space *mapping,
>  				        loff_t lstart, loff_t lend);
> -extern int wait_on_page_writeback_range(struct address_space *mapping,
> -				pgoff_t start, pgoff_t end);
>  extern int __filemap_fdatawrite_range(struct address_space *mapping,
>  				loff_t start, loff_t end, int sync_mode);
>  extern int filemap_fdatawrite_range(struct address_space *mapping,
> Index: linux-2.6/mm/filemap.c
> ===================================================================
> --- linux-2.6.orig/mm/filemap.c	2009-09-30 13:43:04.655004248 -0300
> +++ linux-2.6/mm/filemap.c	2009-09-30 13:45:00.480006033 -0300
> @@ -260,27 +260,27 @@ int filemap_flush(struct address_space *
>  EXPORT_SYMBOL(filemap_flush);
>  
>  /**
> - * wait_on_page_writeback_range - wait for writeback to complete
> - * @mapping:	target address_space
> - * @start:	beginning page index
> - * @end:	ending page index
> + * filemap_fdatawait_range - wait for writeback to complete
> + * @mapping:		address space structure to wait for
> + * @start_byte:		offset in bytes where the range starts
> + * @end_byte:		offset in bytes where the range ends (inclusive)
>   *
> - * Wait for writeback to complete against pages indexed by start->end
> - * inclusive
> + * Walk the list of under-writeback pages of the given address space
> + * in the given range and wait for all of them.
>   */
> -int wait_on_page_writeback_range(struct address_space *mapping,
> -				pgoff_t start, pgoff_t end)
> +int filemap_fdatawait_range(struct address_space *mapping, loff_t start_byte,
> +			    loff_t end_byte)
>  {
> +	pgoff_t index = start_byte >> PAGE_CACHE_SHIFT;
> +	pgoff_t end = end_byte >> PAGE_CACHE_SHIFT;
>  	struct pagevec pvec;
>  	int nr_pages;
>  	int ret = 0;
> -	pgoff_t index;
>  
> -	if (end < start)
> +	if (end_byte < start_byte)
>  		return 0;
>  
>  	pagevec_init(&pvec, 0);
> -	index = start;
>  	while ((index <= end) &&
>  			(nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
>  			PAGECACHE_TAG_WRITEBACK,
> @@ -310,25 +310,6 @@ int wait_on_page_writeback_range(struct 
>  
>  	return ret;
>  }
> -
> -/**
> - * filemap_fdatawait_range - wait for all under-writeback pages to complete in a given range
> - * @mapping: address space structure to wait for
> - * @start:	offset in bytes where the range starts
> - * @end:	offset in bytes where the range ends (inclusive)
> - *
> - * Walk the list of under-writeback pages of the given address space
> - * in the given range and wait for all of them.
> - *
> - * This is just a simple wrapper so that callers don't have to convert offsets
> - * to page indexes themselves
> - */
> -int filemap_fdatawait_range(struct address_space *mapping, loff_t start,
> -			    loff_t end)
> -{
> -	return wait_on_page_writeback_range(mapping, start >> PAGE_CACHE_SHIFT,
> -					    end >> PAGE_CACHE_SHIFT);
> -}
>  EXPORT_SYMBOL(filemap_fdatawait_range);
>  
>  /**
> @@ -345,8 +326,7 @@ int filemap_fdatawait(struct address_spa
>  	if (i_size == 0)
>  		return 0;
>  
> -	return wait_on_page_writeback_range(mapping, 0,
> -				(i_size - 1) >> PAGE_CACHE_SHIFT);
> +	return filemap_fdatawait_range(mapping, 0, i_size - 1);
>  }
>  EXPORT_SYMBOL(filemap_fdatawait);
>  
> @@ -393,9 +373,8 @@ int filemap_write_and_wait_range(struct 
>  						 WB_SYNC_ALL);
>  		/* See comment of filemap_write_and_wait() */
>  		if (err != -EIO) {
> -			int err2 = wait_on_page_writeback_range(mapping,
> -						lstart >> PAGE_CACHE_SHIFT,
> -						lend >> PAGE_CACHE_SHIFT);
> +			int err2 = filemap_fdatawait_range(mapping,
> +						lstart, lend);
>  			if (!err)
>  				err = err2;
>  		}
-- 
Jan Kara <jack@xxxxxxx>
SUSE Labs, CR
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux