lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-id: <1265885996-21982-1-git-send-email-dmonakhov@openvz.org> Date: Thu, 11 Feb 2010 13:59:56 +0300 From: Dmitry Monakhov <dmonakhov@...nvz.org> To: linux-kernel@...r.kernel.org Cc: jens.axboe@...cle.com, linux-ext4@...r.kernel.org, Dmitry Monakhov <dmonakhov@...nvz.org> Subject: [PATCH 3/4] ext4: convert extent zeroout to generic function Signed-off-by: Dmitry Monakhov <dmonakhov@...nvz.org> --- fs/ext4/extents.c | 70 +++------------------------------------------------- 1 files changed, 4 insertions(+), 66 deletions(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 765a482..ff4473a 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -2432,76 +2432,14 @@ void ext4_ext_release(struct super_block *sb) #endif } -static void bi_complete(struct bio *bio, int error) -{ - complete((struct completion *)bio->bi_private); -} - /* FIXME!! we need to try to merge to left or right after zero-out */ static int ext4_ext_zeroout(struct inode *inode, struct ext4_extent *ex) { - int ret = -EIO; - struct bio *bio; - int blkbits, blocksize; - sector_t ee_pblock; - struct completion event; - unsigned int ee_len, len, done, offset; - - - blkbits = inode->i_blkbits; - blocksize = inode->i_sb->s_blocksize; - ee_len = ext4_ext_get_actual_len(ex); - ee_pblock = ext_pblock(ex); + sector_t nr_sects = ((sector_t)ext4_ext_get_actual_len(ex)) << + inode->i_blkbits; - /* convert ee_pblock to 512 byte sectors */ - ee_pblock = ee_pblock << (blkbits - 9); - - while (ee_len > 0) { - - if (ee_len > BIO_MAX_PAGES) - len = BIO_MAX_PAGES; - else - len = ee_len; - - bio = bio_alloc(GFP_NOIO, len); - bio->bi_sector = ee_pblock; - bio->bi_bdev = inode->i_sb->s_bdev; - - done = 0; - offset = 0; - while (done < len) { - ret = bio_add_page(bio, ZERO_PAGE(0), - blocksize, offset); - if (ret != blocksize) { - /* - * We can't add any more pages because of - * hardware limitations. Start a new bio. - */ - break; - } - done++; - offset += blocksize; - if (offset >= PAGE_CACHE_SIZE) - offset = 0; - } - - init_completion(&event); - bio->bi_private = &event; - bio->bi_end_io = bi_complete; - submit_bio(WRITE, bio); - wait_for_completion(&event); - - if (test_bit(BIO_UPTODATE, &bio->bi_flags)) - ret = 0; - else { - ret = -EIO; - break; - } - bio_put(bio); - ee_len -= done; - ee_pblock += done << (blkbits - 9); - } - return ret; + return blkdev_issue_zeroout(inode->i_sb->s_bdev, ext_pblock(ex), + nr_sects, UINT_MAX >> 9, GFP_NOIO, WRITE); } #define EXT4_EXT_ZERO_LEN 7 -- 1.6.6 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists