Message ID | 20200624023041.30247-1-kohada.t2@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] exfat: optimize exfat_zeroed_cluster() | expand |
> 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> Looks good. Thanks. > --- > Changes in v2 > - Rebase to latest exfat-dev > > fs/exfat/fatent.c | 53 +++++++++-------------------------------------- > 1 file changed, 10 insertions(+), 43 deletions(-) > > diff --git a/fs/exfat/fatent.c b/fs/exfat/fatent.c index > 82ee8246c080..c3c9afee7418 100644 > --- a/fs/exfat/fatent.c > +++ b/fs/exfat/fatent.c > @@ -229,21 +229,6 @@ int exfat_find_last_cluster(struct super_block *sb, > struct exfat_chain *p_chain, > return 0; > } > > -static inline int exfat_sync_bhs(struct buffer_head **bhs, int nr_bhs) -{ > - int i, err = 0; > - > - for (i = 0; i < nr_bhs; i++) > - write_dirty_buffer(bhs[i], 0); > - > - for (i = 0; i < nr_bhs; i++) { > - wait_on_buffer(bhs[i]); > - if (!err && !buffer_uptodate(bhs[i])) > - err = -EIO; > - } > - return err; > -} > - > int exfat_zeroed_cluster(struct inode *dir, unsigned int clu) { > struct super_block *sb = dir->i_sb; > @@ -265,41 +250,23 @@ int exfat_zeroed_cluster(struct inode *dir, unsigned > int clu) > } > > /* Zeroing the unused blocks on this cluster */ > - n = 0; > while (blknr < last_blknr) { > - bhs[n] = sb_getblk(sb, blknr); > - if (!bhs[n]) { > - err = -ENOMEM; > - goto release_bhs; > - } > - memset(bhs[n]->b_data, 0, sb->s_blocksize); > - exfat_update_bh(bhs[n], 0); > - > - n++; > - blknr++; > - > - if (n == nr_bhs) { > - if (IS_DIRSYNC(dir)) { > - err = exfat_sync_bhs(bhs, n); > - if (err) > - goto release_bhs; > + for (n = 0; n < nr_bhs && blknr < last_blknr; n++, blknr++) > { > + bhs[n] = sb_getblk(sb, blknr); > + if (!bhs[n]) { > + err = -ENOMEM; > + goto release_bhs; > } > - > - for (i = 0; i < n; i++) > - brelse(bhs[i]); > - n = 0; > + memset(bhs[n]->b_data, 0, sb->s_blocksize); > } > - } > > - if (IS_DIRSYNC(dir)) { > - err = exfat_sync_bhs(bhs, n); > + err = exfat_update_bhs(bhs, n, IS_DIRSYNC(dir)); > if (err) > goto release_bhs; > - } > - > - for (i = 0; i < n; i++) > - brelse(bhs[i]); > > + for (i = 0; i < n; i++) > + brelse(bhs[i]); > + } > return 0; > > release_bhs: > -- > 2.25.1
> > 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> > > Looks good. Thanks. Pushed it into exfat #dev. Thanks!
diff --git a/fs/exfat/fatent.c b/fs/exfat/fatent.c index 82ee8246c080..c3c9afee7418 100644 --- a/fs/exfat/fatent.c +++ b/fs/exfat/fatent.c @@ -229,21 +229,6 @@ int exfat_find_last_cluster(struct super_block *sb, struct exfat_chain *p_chain, return 0; } -static inline int exfat_sync_bhs(struct buffer_head **bhs, int nr_bhs) -{ - int i, err = 0; - - for (i = 0; i < nr_bhs; i++) - write_dirty_buffer(bhs[i], 0); - - for (i = 0; i < nr_bhs; i++) { - wait_on_buffer(bhs[i]); - if (!err && !buffer_uptodate(bhs[i])) - err = -EIO; - } - return err; -} - int exfat_zeroed_cluster(struct inode *dir, unsigned int clu) { struct super_block *sb = dir->i_sb; @@ -265,41 +250,23 @@ int exfat_zeroed_cluster(struct inode *dir, unsigned int clu) } /* Zeroing the unused blocks on this cluster */ - n = 0; while (blknr < last_blknr) { - bhs[n] = sb_getblk(sb, blknr); - if (!bhs[n]) { - err = -ENOMEM; - goto release_bhs; - } - memset(bhs[n]->b_data, 0, sb->s_blocksize); - exfat_update_bh(bhs[n], 0); - - n++; - blknr++; - - if (n == nr_bhs) { - if (IS_DIRSYNC(dir)) { - err = exfat_sync_bhs(bhs, n); - if (err) - goto release_bhs; + for (n = 0; n < nr_bhs && blknr < last_blknr; n++, blknr++) { + bhs[n] = sb_getblk(sb, blknr); + if (!bhs[n]) { + err = -ENOMEM; + goto release_bhs; } - - for (i = 0; i < n; i++) - brelse(bhs[i]); - n = 0; + memset(bhs[n]->b_data, 0, sb->s_blocksize); } - } - if (IS_DIRSYNC(dir)) { - err = exfat_sync_bhs(bhs, n); + err = exfat_update_bhs(bhs, n, IS_DIRSYNC(dir)); if (err) goto release_bhs; - } - - for (i = 0; i < n; i++) - brelse(bhs[i]); + for (i = 0; i < n; i++) + brelse(bhs[i]); + } return 0; release_bhs:
Replace part of exfat_zeroed_cluster() with exfat_update_bhs(). And remove exfat_sync_bhs(). Signed-off-by: Tetsuhiro Kohada <kohada.t2@gmail.com> --- Changes in v2 - Rebase to latest exfat-dev fs/exfat/fatent.c | 53 +++++++++-------------------------------------- 1 file changed, 10 insertions(+), 43 deletions(-)