Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

udf: add writepages support for udf

Use mpage_writepages() instead of multiple calls to udf_writepage()
to make performance higher.

*Write Speed with writepage() =
RecSize ReadSpeed WriteSpeed RanReadSpeed RanWriteSpeed
10485760 0.00MB/sec 8.56MB/sec 0.00MB/sec 8.20MB/sec
1048576 0.00MB/sec 8.57MB/sec 0.00MB/sec 6.42MB/sec
524288 0.00MB/sec 8.59MB/sec 0.00MB/sec 5.24MB/sec
262144 0.00MB/sec 8.59MB/sec 0.00MB/sec 4.17MB/sec
131072 0.00MB/sec 8.53MB/sec 0.00MB/sec 3.32MB/sec
65536 0.00MB/sec 8.49MB/sec 0.00MB/sec 2.31MB/sec

*Write Speed with writepages()
RecSize ReadSpeed WriteSpeed RanReadSpeed RanWriteSpeed
10485760 0.00MB/sec 9.88MB/sec 0.00MB/sec 9.60MB/sec
1048576 0.00MB/sec 9.95MB/sec 0.00MB/sec 7.52MB/sec
524288 0.00MB/sec 9.98MB/sec 0.00MB/sec 6.16MB/sec
262144 0.00MB/sec 9.90MB/sec 0.00MB/sec 4.98MB/sec
131072 0.00MB/sec 9.89MB/sec 0.00MB/sec 3.78MB/sec
65536 0.00MB/sec 9.81MB/sec 0.00MB/sec 2.50MB/sec

There is about 1.4MB/sec speed improvement over 8.5MB/sec,
which comes out around 16% improvement.

Signed-off-by: Namjae Jeon <linkinjeon@gmail.com>
Signed-off-by: Ashish Sangwan <ashish.sangwan2@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>

authored by

Namjae Jeon and committed by
Jan Kara
378b8e1a e4230108

+7
+7
fs/udf/inode.c
··· 100 100 return block_write_full_page(page, udf_get_block, wbc); 101 101 } 102 102 103 + static int udf_writepages(struct address_space *mapping, 104 + struct writeback_control *wbc) 105 + { 106 + return mpage_writepages(mapping, wbc, udf_get_block); 107 + } 108 + 103 109 static int udf_readpage(struct file *file, struct page *page) 104 110 { 105 111 return mpage_readpage(page, udf_get_block); ··· 151 145 .readpage = udf_readpage, 152 146 .readpages = udf_readpages, 153 147 .writepage = udf_writepage, 148 + .writepages = udf_writepages, 154 149 .write_begin = udf_write_begin, 155 150 .write_end = generic_write_end, 156 151 .bmap = udf_bmap,