kernels/linux-2.6.24/mm/filemap.c
/**
 * sync_page_range_nolock
 * @inode:	target inode
 * @mapping:	target address_space
 * @pos:	beginning offset in pages to write
 * @count:	number of bytes to write
 *
 * Note: Holding i_mutex across sync_page_range_nolock() is not a good idea
 * as it forces O_SYNC writers to different parts of the same file
 * to be serialised right until io completion.
 */
sync_page_range_nolock
@inode:      target inode
@mapping:    target address_space
@pos:        beginning offset in pages to write
@count:      number of bytes to write

Holding i_mutex across sync_page_range_nolock() is not a good idea
as it forces O_SYNC writers to different parts of the same file
to be serialised right until io completion.
sync_page_range_nolock @inode : target inode @mapping : target address_space @pos : beginning offset in pages to write @count : number of bytes to write Holding i_mutex across sync_page_range_nolock () is not a good idea as it forces O_SYNC writers to different parts of the same file to be serialised right until io completion .
int sync_page_range_nolock(struct inode *inode, struct address_space *mapping,
			   loff_t pos, loff_t count)
{
	pgoff_t start = pos >> PAGE_CACHE_SHIFT;
	pgoff_t end = (pos + count - 1) >> PAGE_CACHE_SHIFT;
	int ret;
	if (!mapping_cap_writeback_dirty(mapping) || !count)
		return 0;
	ret = filemap_fdatawrite_range(mapping, pos, pos + count - 1);
	if (ret == 0)
		ret = generic_osync_inode(inode, mapping, OSYNC_METADATA);
	if (ret == 0)
		ret = wait_on_page_writeback_range(mapping, start, end);
	return ret;
}
int sync_page_range_nolock ( struct inode * inode , struct address_space * mapping , loff_t pos , loff_t count ) { pgoff_t start = pos >> PAGE_CACHE_SHIFT ; pgoff_t end = ( pos + count - 1 ) >> PAGE_CACHE_SHIFT ; int ret ; if ( ! mapping_cap_writeback_dirty ( mapping ) || ! count ) return 0 ; ret = filemap_fdatawrite_range ( mapping , pos , pos + count - 1 ) ; if ( ret == 0 ) ret = generic_osync_inode ( inode , mapping , OSYNC_METADATA ) ; if ( ret == 0 ) ret = wait_on_page_writeback_range ( mapping , start , end ) ; return ret ; }
sync_page_range_nolock
 @inode:      target inode
 @mapping:    target address_space
 @pos:        beginning offset in pages to write
 @count:      number of bytes to write
sync_page_range_nolock @inode : target inode @mapping : target address_space @pos : beginning offset in pages to write @count : number of bytes to write