From: Theodore Ts'o <tytso@mit.edu>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-ext4@vger.kernel.org
Subject: Re: [PATCH 09/47] libext2fs: use a dynamically sized (or caller-provided) block zeroing buffer
Date: Sat, 13 Dec 2014 11:24:03 -0500 [thread overview]
Message-ID: <20141213162403.GF17783@thunk.org> (raw)
In-Reply-To: <20141212050249.GA27096@birch.djwong.org>
This is my replacement patch.
- Ted
commit 0a92af260da381e2581074871707e487728373ad
Author: Darrick J. Wong <darrick.wong@oracle.com>
Date: Fri Dec 12 18:27:12 2014 -0500
libext2fs: use a dynamically sized block zeroing buffer
Dynamically grow the block zeroing buffer to a maximum of 4MB, and
allow callers to provide their own zeroed buffer in
ext2fs_zero_blocks2().
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
diff --git a/lib/ext2fs/mkjournal.c b/lib/ext2fs/mkjournal.c
index e8f8b30..fcc6741 100644
--- a/lib/ext2fs/mkjournal.c
+++ b/lib/ext2fs/mkjournal.c
@@ -148,12 +148,13 @@ errfree:
* attempt to free the static zeroizing buffer. (This is to keep
* programs that check for memory leaks happy.)
*/
-#define STRIDE_LENGTH (4194304 / fs->blocksize)
+#define MAX_STRIDE_LENGTH (4194304 / (int) fs->blocksize)
errcode_t ext2fs_zero_blocks2(ext2_filsys fs, blk64_t blk, int num,
blk64_t *ret_blk, int *ret_count)
{
int j, count;
- static char *buf;
+ static void *buf;
+ static int stride_length;
errcode_t retval;
/* If fs is null, clean up the static buffer and return */
@@ -164,24 +165,36 @@ errcode_t ext2fs_zero_blocks2(ext2_filsys fs, blk64_t blk, int num,
}
return 0;
}
+
+ /* Deal with zeroing less than 1 block */
+ if (num <= 0)
+ return 0;
+
/* Allocate the zeroizing buffer if necessary */
- if (!buf) {
- buf = malloc(fs->blocksize * STRIDE_LENGTH);
- if (!buf)
- return ENOMEM;
- memset(buf, 0, fs->blocksize * STRIDE_LENGTH);
+ if (num > stride_length && stride_length < MAX_STRIDE_LENGTH) {
+ void *p;
+ int new_stride = num;
+
+ if (new_stride > MAX_STRIDE_LENGTH)
+ new_stride = MAX_STRIDE_LENGTH;
+ p = realloc(buf, fs->blocksize * new_stride);
+ if (!p)
+ return EXT2_ET_NO_MEMORY;
+ buf = p;
+ stride_length = new_stride;
+ memset(buf, 0, fs->blocksize * stride_length);
}
/* OK, do the write loop */
j=0;
while (j < num) {
- if (blk % STRIDE_LENGTH) {
- count = STRIDE_LENGTH - (blk % STRIDE_LENGTH);
+ if (blk % stride_length) {
+ count = stride_length - (blk % stride_length);
if (count > (num - j))
count = num - j;
} else {
count = num - j;
- if (count > STRIDE_LENGTH)
- count = STRIDE_LENGTH;
+ if (count > stride_length)
+ count = stride_length;
}
retval = io_channel_write_blk64(fs->io, blk, count, buf);
if (retval) {
next prev parent reply other threads:[~2014-12-13 16:24 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-07 21:50 [PATCH 00/47] e2fsprogs November 2014 patchbomb Darrick J. Wong
2014-11-07 21:50 ` [PATCH 01/47] tests: fix test scripts that don't work on non-Linux systems Darrick J. Wong
2014-11-08 1:55 ` Theodore Ts'o
2014-11-07 21:50 ` [PATCH 02/47] misc: fix compiler warnings and minor build errors Darrick J. Wong
2014-11-08 2:25 ` Theodore Ts'o
2014-11-07 21:51 ` [PATCH 03/47] dumpe2fs: don't crash when the user provides no block device argument Darrick J. Wong
2014-11-08 2:26 ` Theodore Ts'o
2014-11-07 21:51 ` [PATCH 04/47] libext2fs: fix endian handling error; reduce fragmentation some Darrick J. Wong
2014-11-17 21:26 ` Theodore Ts'o
2014-11-07 21:51 ` [PATCH 05/47] libext2fs: set BLOCK_UNINIT for non-last blockgroups if all blocks are free Darrick J. Wong
2014-11-17 22:47 ` Theodore Ts'o
2014-11-07 21:51 ` [PATCH 06/47] libext2fs: don't allow alloc_stats on bad inode/block numbers Darrick J. Wong
2014-11-17 23:00 ` Theodore Ts'o
2014-11-07 21:51 ` [PATCH 07/47] libext2fs: refactor extent head creation Darrick J. Wong
2014-12-03 3:55 ` Theodore Ts'o
2014-11-07 21:51 ` [PATCH 08/47] libext2fs: file IO routines should handle uninit blocks Darrick J. Wong
2014-12-03 3:57 ` Theodore Ts'o
2014-11-07 21:51 ` [PATCH 09/47] libext2fs: use a dynamically sized (or caller-provided) block zeroing buffer Darrick J. Wong
2014-12-12 2:37 ` Theodore Ts'o
2014-12-12 5:02 ` Darrick J. Wong
2014-12-13 16:24 ` Theodore Ts'o [this message]
2014-12-13 16:25 ` Theodore Ts'o
2014-12-15 16:09 ` Andreas Dilger
2014-11-07 21:51 ` [PATCH 10/47] libext2fs: support BLKZEROOUT/FALLOC_FL_ZERO_RANGE in ext2fs_zero_blocks Darrick J. Wong
2014-12-13 16:29 ` Theodore Ts'o
2014-12-14 3:08 ` Darrick J. Wong
2014-11-07 21:51 ` [PATCH 11/47] libext2fs: find inode goal when allocating blocks Darrick J. Wong
2014-12-14 1:13 ` Theodore Ts'o
2014-12-14 21:02 ` Darrick J. Wong
2014-11-07 21:52 ` [PATCH 12/47] libext2fs: set interior tree block goal more intelligently Darrick J. Wong
2014-12-14 1:17 ` Theodore Ts'o
2014-11-07 21:52 ` [PATCH 13/47] libext2fs: add a way to check the theoretical maximum extent tree depth Darrick J. Wong
2014-12-14 2:23 ` Theodore Ts'o
2014-12-14 3:11 ` Darrick J. Wong
2014-12-15 3:48 ` Theodore Ts'o
2014-12-15 6:38 ` Darrick J. Wong
2014-11-07 21:52 ` [PATCH 14/47] libext2fs: ext2fs_new_block2() should call alloc_block hook Darrick J. Wong
2014-11-07 21:52 ` [PATCH 15/47] misc: don't allow mk_hugefiles unless the fs supports extents Darrick J. Wong
2014-12-14 2:51 ` Theodore Ts'o
2014-11-07 21:52 ` [PATCH 16/47] dumpe2fs: 80 column outputs, please Darrick J. Wong
2014-12-14 2:52 ` Theodore Ts'o
2014-11-07 21:52 ` [PATCH 17/47] dumpe2fs: output cleanup Darrick J. Wong
2014-12-14 2:53 ` Theodore Ts'o
2014-11-07 21:52 ` [PATCH 18/47] e2fsck: only complain about no-checksum directory blocks once Darrick J. Wong
2014-12-14 2:55 ` Theodore Ts'o
2014-11-07 21:52 ` [PATCH 19/47] e2fsck: don't complain about root dir csum failures when getting lnf Darrick J. Wong
2014-12-14 2:57 ` Theodore Ts'o
2014-11-07 21:52 ` [PATCH 20/47] tune2fs: warn if extents are not enabled when turning on metadata_csum Darrick J. Wong
2014-12-14 2:58 ` Theodore Ts'o
2014-11-07 21:53 ` [PATCH 21/47] tune2fs: enable uninit_bg when disabling metadata_csum Darrick J. Wong
2014-12-14 2:58 ` Theodore Ts'o
2014-11-07 21:53 ` [PATCH 22/47] tests: testcases for enabling/disabling metadata_csum via tune2fs Darrick J. Wong
2014-12-14 3:00 ` Theodore Ts'o
2014-11-07 21:53 ` [PATCH 23/47] mke2fs: don't zero inode table blocks that are already zeroed Darrick J. Wong
2014-12-14 3:01 ` Theodore Ts'o
2014-11-07 21:53 ` [PATCH 24/47] resize2fs: don't exit if shrinking sparse_super2 fs to one bg Darrick J. Wong
2014-12-14 3:06 ` Theodore Ts'o
2014-11-07 21:53 ` [PATCH 25/47] resize2fs: quickly rewrite extent blocks when moving an inode w/ metadata_csum Darrick J. Wong
2014-12-14 3:09 ` Theodore Ts'o
2014-11-07 21:53 ` [PATCH 26/47] resize2fs: use old_fs to detect per-bg metadata blocks to free Darrick J. Wong
2014-12-15 2:09 ` Theodore Ts'o
2014-11-07 21:53 ` [PATCH 27/47] resize2fs: don't interpret bitmap shift while crossing flexbg as raid stride Darrick J. Wong
2014-12-15 2:11 ` Theodore Ts'o
2014-11-07 21:53 ` [PATCH 28/47] resize2fs: set bg flags and unused inode count when resizing Darrick J. Wong
2014-12-15 2:12 ` Theodore Ts'o
2014-11-07 21:53 ` [PATCH 29/47] resize2fs: don't mark unallocated bg metadata blocks when fixing bg flags Darrick J. Wong
2014-12-15 2:17 ` Theodore Ts'o
2014-12-15 7:09 ` Darrick J. Wong
2014-12-19 19:15 ` Darrick J. Wong
2014-11-07 21:54 ` [PATCH 30/47] resize2fs: don't play stupid games with the block count Darrick J. Wong
2014-12-15 3:13 ` Theodore Ts'o
2014-11-07 21:54 ` [PATCH 31/47] libext2fs/e2fsck: provide routines to read-ahead metadata Darrick J. Wong
2014-12-15 17:36 ` Theodore Ts'o
2014-12-15 19:19 ` Darrick J. Wong
2014-11-07 21:54 ` [PATCH 32/47] e2fsck: read-ahead metadata during passes 1, 2, and 4 Darrick J. Wong
2014-12-10 20:27 ` Darrick J. Wong
2014-12-10 22:00 ` Theodore Ts'o
2014-11-07 21:54 ` [PATCH 33/47] e2fsck: rebuild sparse extent trees/convert non-extent ext3 files Darrick J. Wong
2014-12-04 23:20 ` Andreas Dilger
2014-12-04 23:45 ` Darrick J. Wong
2014-12-11 22:05 ` [PATCH v2 " Darrick J. Wong
2014-11-07 21:54 ` [PATCH 34/47] tests: verify proper rebuilding of sparse extent trees and block map file conversion Darrick J. Wong
2014-11-07 21:54 ` [PATCH 35/47] resize2fs: convert fs to and from 64bit mode Darrick J. Wong
2014-12-15 3:32 ` Theodore Ts'o
2014-12-15 6:41 ` Darrick J. Wong
2014-12-15 17:46 ` Theodore Ts'o
2014-11-07 21:54 ` [PATCH 36/47] tests: test resize2fs 32->64 and 64->32bit conversion code Darrick J. Wong
2014-12-15 17:46 ` Theodore Ts'o
2014-11-07 21:54 ` [PATCH 37/47] libext2fs: support allocating uninit blocks in bmap2() Darrick J. Wong
2014-11-07 21:54 ` [PATCH 38/47] libext2fs: find/alloc a range of empty blocks Darrick J. Wong
2014-11-07 21:54 ` [PATCH 39/47] libext2fs: add new hooks to support large allocations Darrick J. Wong
2014-11-07 21:55 ` [PATCH 40/47] libext2fs: implement fallocate Darrick J. Wong
2014-11-07 21:55 ` [PATCH 41/47] libext2fs: use fallocate for creating journals and hugefiles Darrick J. Wong
2014-11-07 21:55 ` [PATCH 42/47] debugfs: implement fallocate Darrick J. Wong
2014-11-07 21:55 ` [PATCH 43/47] tests: test debugfs punch command Darrick J. Wong
2014-11-07 21:55 ` [PATCH 45/47] fuse2fs: translate ACL structures Darrick J. Wong
2014-11-07 21:55 ` [PATCH 46/47] fuse2fs: handle 64-bit dates correctly Darrick J. Wong
2014-11-07 21:55 ` [PATCH 47/47] fuse2fs: implement fallocate Darrick J. Wong
2014-11-12 22:43 ` [PATCH 48/47] misc: fix infinite loop when finding the start of the hugefile start range Darrick J. Wong
2014-12-03 3:06 ` Theodore Ts'o
2014-11-27 0:01 ` [PATCH 49/47] libext2fs: don't report garbage inodes with really large inodes Darrick J. Wong
2014-12-03 3:18 ` Theodore Ts'o
2014-12-04 20:39 ` [PATCH 51/47] e2fsck: force-reread of inode from disk when re-checking a checksum error Darrick J. Wong
2014-12-11 22:49 ` Theodore Ts'o
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141213162403.GF17783@thunk.org \
--to=tytso@mit.edu \
--cc=darrick.wong@oracle.com \
--cc=linux-ext4@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.