.SH OPTIONS
.TP
.BI \-c " chunk_kb"
-Desired size of chunk. It is specified in units of kilobytes (KB). If no
+If a chunk size is specified, then
+.B e2freefrag
+will print how many free chunks of size
.I chunk_kb
-is specified on the command line, then the default value is 1024KB.
+are available in units of kilobytes (Kb). The chunk size must be a
+power of two and be larger than filesystem block size.
.TP
.BI \-h
Print the usage of the program.
.br
Free blocks: 292995 (19.5%)
.br
-Chunk size: 1048576 bytes (256 blocks)
-.br
-Total chunks: 5876
-.br
-Free chunks: 463 (7.9%)
-.br
Min. free extent: 4 KB
.br
{
int i;
- info->chunkbits = ul_log2(info->chunkbytes);
info->blocksize_bits = ul_log2((unsigned long)fs->blocksize);
- info->blks_in_chunk = info->chunkbytes >> info->blocksize_bits;
+ if (info->chunkbytes) {
+ info->chunkbits = ul_log2(info->chunkbytes);
+ info->blks_in_chunk = info->chunkbytes >> info->blocksize_bits;
+ } else {
+ info->chunkbits = ul_log2(DEFAULT_CHUNKSIZE);
+ info->blks_in_chunk = DEFAULT_CHUNKSIZE >> info->blocksize_bits;
+ }
info->min = ~0UL;
info->max = info->avg = 0;
(double)fs->super->s_free_blocks_count * 100 /
fs->super->s_blocks_count);
- printf("\nChunksize: %lu bytes (%u blocks)\n",
- info->chunkbytes, info->blks_in_chunk);
- total_chunks = (fs->super->s_blocks_count + info->blks_in_chunk) >>
- (info->chunkbits - info->blocksize_bits);
- printf("Total chunks: %lu\nFree chunks: %lu (%0.1f%%)\n",
- total_chunks, info->free_chunks,
- (double)info->free_chunks * 100 / total_chunks);
+ if (info->chunkbytes) {
+ printf("\nChunksize: %lu bytes (%u blocks)\n",
+ info->chunkbytes, info->blks_in_chunk);
+ total_chunks = (fs->super->s_blocks_count +
+ info->blks_in_chunk) >>
+ (info->chunkbits - info->blocksize_bits);
+ printf("Total chunks: %lu\nFree chunks: %lu (%0.1f%%)\n",
+ total_chunks, info->free_chunks,
+ (double)info->free_chunks * 100 / total_chunks);
+ }
/* Display chunk information in KB */
if (info->real_free_chunks) {
int main(int argc, char *argv[])
{
- struct chunk_info chunk_info = { .chunkbytes = DEFAULT_CHUNKSIZE };
+ struct chunk_info chunk_info = { };
errcode_t retval = 0;
ext2_filsys fs = NULL;
char *device_name;
open_device(device_name, &fs);
- if (chunk_info.chunkbytes < fs->blocksize) {
+ if (chunk_info.chunkbytes && (chunk_info.chunkbytes < fs->blocksize)) {
fprintf(stderr, "%s: chunksize must be greater than or equal "
"to filesystem blocksize.\n", progname);
exit(1);