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

exfat: optimize exfat_zeroed_cluster()

Replace part of exfat_zeroed_cluster() with exfat_update_bhs().
And remove exfat_sync_bhs().

Signed-off-by: Tetsuhiro Kohada <kohada.t2@gmail.com>
Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>

authored by

Tetsuhiro Kohada and committed by
Namjae Jeon
4dc7d35e 8b0c4717

+10 -43
+10 -43
fs/exfat/fatent.c
··· 229 229 return 0; 230 230 } 231 231 232 - static inline int exfat_sync_bhs(struct buffer_head **bhs, int nr_bhs) 233 - { 234 - int i, err = 0; 235 - 236 - for (i = 0; i < nr_bhs; i++) 237 - write_dirty_buffer(bhs[i], 0); 238 - 239 - for (i = 0; i < nr_bhs; i++) { 240 - wait_on_buffer(bhs[i]); 241 - if (!err && !buffer_uptodate(bhs[i])) 242 - err = -EIO; 243 - } 244 - return err; 245 - } 246 - 247 232 int exfat_zeroed_cluster(struct inode *dir, unsigned int clu) 248 233 { 249 234 struct super_block *sb = dir->i_sb; ··· 250 265 } 251 266 252 267 /* Zeroing the unused blocks on this cluster */ 253 - n = 0; 254 268 while (blknr < last_blknr) { 255 - bhs[n] = sb_getblk(sb, blknr); 256 - if (!bhs[n]) { 257 - err = -ENOMEM; 258 - goto release_bhs; 259 - } 260 - memset(bhs[n]->b_data, 0, sb->s_blocksize); 261 - exfat_update_bh(bhs[n], 0); 262 - 263 - n++; 264 - blknr++; 265 - 266 - if (n == nr_bhs) { 267 - if (IS_DIRSYNC(dir)) { 268 - err = exfat_sync_bhs(bhs, n); 269 - if (err) 270 - goto release_bhs; 269 + for (n = 0; n < nr_bhs && blknr < last_blknr; n++, blknr++) { 270 + bhs[n] = sb_getblk(sb, blknr); 271 + if (!bhs[n]) { 272 + err = -ENOMEM; 273 + goto release_bhs; 271 274 } 272 - 273 - for (i = 0; i < n; i++) 274 - brelse(bhs[i]); 275 - n = 0; 275 + memset(bhs[n]->b_data, 0, sb->s_blocksize); 276 276 } 277 - } 278 277 279 - if (IS_DIRSYNC(dir)) { 280 - err = exfat_sync_bhs(bhs, n); 278 + err = exfat_update_bhs(bhs, n, IS_DIRSYNC(dir)); 281 279 if (err) 282 280 goto release_bhs; 281 + 282 + for (i = 0; i < n; i++) 283 + brelse(bhs[i]); 283 284 } 284 - 285 - for (i = 0; i < n; i++) 286 - brelse(bhs[i]); 287 - 288 285 return 0; 289 286 290 287 release_bhs: