From: Eric Sandeen <sandeen@redhat.com>
To: ext4 development <linux-ext4@vger.kernel.org>
Subject: [PATCH, RFC] mke2fs: get device topology values from blkid
Date: Thu, 17 Sep 2009 17:22:49 -0500 [thread overview]
Message-ID: <4AB2B6B9.7010506@redhat.com> (raw)
This is just a rough cut, due to the blkid header selection
issues I mentioned earlier on the list. It'll also need
some config-fu to be sure we've got a blkid which has these
calls, but with it in place, we'll finally have automatic
selection of stride/stripe:
# misc/mke2fs -b 4096 /dev/md0
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=16 blocks, Stripe width=32 blocks
...
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index 84c4361..8fd3cd8 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -49,6 +49,7 @@ extern int optind;
#include <sys/types.h>
#include <libgen.h>
#include <limits.h>
+#include <blkid/blkid.h>
#include "ext2fs/ext2_fs.h"
#include "et/com_err.h"
@@ -614,6 +615,8 @@ static void show_stats(ext2_filsys fs)
s->s_log_block_size);
printf(_("Fragment size=%u (log=%u)\n"), fs->fragsize,
s->s_log_frag_size);
+ printf(_("Stride=%u blocks, Stripe width=%u blocks\n"),
+ s->s_raid_stride, s->s_raid_stripe_width);
printf(_("%u inodes, %u blocks\n"), s->s_inodes_count,
s->s_blocks_count);
printf(_("%u blocks (%2.2f%%) reserved for the super user\n"),
@@ -1073,6 +1076,51 @@ static int get_bool_from_profile(char **fs_types, const char *opt, int def_val)
extern const char *mke2fs_default_profile;
static const char *default_files[] = { "<default>", 0 };
+/*
+ * Sets the geometry of a device (stripe/stride)
+ */
+static errcode_t ext2fs_get_device_geometry(const char *file,
+ struct ext2_super_block *fs_param)
+{
+ int fd;
+ int rc = 1;
+ int blocksize;
+ blkid_probe pr;
+ blkid_topology tp;
+ unsigned long min_io;
+ unsigned long opt_io;
+
+#ifdef HAVE_OPEN64
+ fd = open64(file, O_RDONLY);
+#else
+ fd = open(file, O_RDONLY);
+#endif
+ if (fd < 0)
+ return errno;
+
+ pr = blkid_new_probe();
+ if (!pr)
+ goto out;
+
+ rc = blkid_probe_set_device(pr, fd, 0, 0);
+ if (rc)
+ goto out;
+
+ tp = blkid_probe_get_topology(pr);
+ if (!tp)
+ goto out;
+
+ min_io = blkid_topology_get_minimum_io_size(tp);
+ opt_io = blkid_topology_get_optimal_io_size(tp);
+ blocksize = EXT2_BLOCK_SIZE(fs_param);
+
+ fs_param->s_raid_stride = min_io / blocksize;
+ fs_param->s_raid_stripe_width = opt_io / blocksize;
+ rc = 0;
+out:
+ close(fd);
+ return rc;
+}
static void PRS(int argc, char *argv[])
{
int b, c;
@@ -1633,6 +1681,8 @@ got_size:
fs_param.s_log_frag_size = fs_param.s_log_block_size =
int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
+ ext2fs_get_device_geometry(device_name, &fs_param);
+
blocksize = EXT2_BLOCK_SIZE(&fs_param);
lazy_itable_init = get_bool_from_profile(fs_types,
next reply other threads:[~2009-09-17 22:22 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-17 22:22 Eric Sandeen [this message]
2009-09-18 5:55 ` [PATCH, RFC] mke2fs: get device topology values from blkid Andreas Dilger
2009-09-18 14:04 ` Eric Sandeen
2009-09-18 14:20 ` Andreas Dilger
2009-09-18 14:30 ` Eric Sandeen
2009-09-18 16:43 ` Theodore Tso
2009-09-18 16:57 ` Eric Sandeen
2009-09-18 6:13 ` Martin K. Petersen
2009-09-18 14:18 ` Andreas Dilger
2009-09-18 14:23 ` Eric Sandeen
2009-09-18 19:40 ` Martin K. Petersen
2009-09-18 20:28 ` Andreas Dilger
2009-09-20 20:46 ` Martin K. Petersen
2009-09-22 14:30 ` Ric Wheeler
2009-09-18 23:59 ` Karel Zak
2009-09-19 3:03 ` Eric Sandeen
2009-09-21 17:06 ` [PATCH V2] " Eric Sandeen
2009-10-02 16:32 ` [PATCH V3] " Eric Sandeen
2009-10-04 19:16 ` Theodore Tso
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=4AB2B6B9.7010506@redhat.com \
--to=sandeen@redhat.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.