From: Zirong Lang <zlang@redhat.com>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH 1/2] lib/tst_mkfs: new tst_mkfs_sized function for create appointed size fs
Date: Wed, 9 Mar 2016 11:01:32 -0500 (EST) [thread overview]
Message-ID: <1806320002.27803455.1457539292136.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <1202691488.27788761.1457537492316.JavaMail.zimbra@redhat.com>
----- 原始邮件 -----
> 发件人: "Zirong Lang" <zlang@redhat.com>
> 收件人: "Cyril Hrubis" <chrubis@suse.cz>
> 抄送: ltp@lists.linux.it
> 发送时间: 星期三, 2016年 3 月 09日 下午 11:31:32
> 主题: Re: [LTP] [PATCH 1/2] lib/tst_mkfs: new tst_mkfs_sized function for create appointed size fs
>
>
>
> ----- 原始邮件 -----
> > 发件人: "Cyril Hrubis" <chrubis@suse.cz>
> > 收件人: "Zorro Lang" <zlang@redhat.com>
> > 抄送: ltp@lists.linux.it
> > 发送时间: 星期三, 2016年 3 月 09日 下午 9:07:10
> > 主题: Re: [PATCH 1/2] lib/tst_mkfs: new tst_mkfs_sized function for create
> > appointed size fs
> >
> > Hi!
> > > #include "test.h"
> > > #include "ltp_priv.h"
> > >
> > > #define OPTS_MAX 32
> > >
> > > -void tst_mkfs(void (cleanup_fn)(void), const char *dev,
> > > - const char *fs_type, const char *const fs_opts[])
> > > +long long cvtnum(const char *s)
> > > +{
> > > + long long i;
> > > + char *sp = NULL;
> > > +
> > > + i = strtoll(s, &sp, 0);
> > > + if (i == 0 && sp == s)
> > > + return -1LL;
> > > + if (*sp == '\0')
> > > + return i;
> > > +
> > > + if (*sp == 'k' && sp[1] == '\0')
> > > + return 1024LL * i;
> > > + if (*sp == 'm' && sp[1] == '\0')
> > > + return 1024LL * 1024LL * i;
> > > + if (*sp == 'g' && sp[1] == '\0')
> > > + return 1024LL * 1024LL * 1024LL * i;
> > > + if (*sp == 't' && sp[1] == '\0')
> > > + return 1024LL * 1024LL * 1024LL * 1024LL * i;
> > > + if (*sp == 'p' && sp[1] == '\0')
> > > + return 1024LL * 1024LL * 1024LL * 1024LL * 1024LL * i;
> > > + if (*sp == 'e' && sp[1] == '\0')
> > > + return 1024LL * 1024LL * 1024LL * 1024LL * 1024LL * 1024LL * i;
> > > + return -1LL;
> > > +}
> >
> > We allready have bytes_by_prefix() in LTP library.
>
> Oh, I just noticed that function. The difference is bytes_by_prefix() run an
> int value, so it can't bigger than 2^31. But some FS, likes XFS can support
> very huge size, even in RHEL-7, XFS support 500T. it's bigger than 2^31.
>
> But generally we won't run LTP on a 500T device:) So if you don't want to
> change
> that, we should say mkfs size can't bigger than 2^31 bytes, or the result
> will
> be unexpected.
>
> >
> > > +void tst_mkfs_sized(void (cleanup_fn)(void), const char *dev,
> > > + const char *fs_type, const char *const fs_opts[],
> > > + const char *fssize, const char *blocksize)
> >
> > What about passing the size parameter as we do in tst_fs_has_free()?
> >
> > I.e. with two paramters where one is size and the second is units?
>
> Oh, I don't know why we need two parameters to describe one size. I use
> "char *fssize" due to tst_mkfs() use string paramters directly, it don't
> need an int value(but int value is OK too).
>
> >
> > Also why have you added the blocksize parameter as well? The block size
> > is needed only for the mmap16 test while limiting filesystem size seems
> > like good addition to the library?
>
> Block size is needed because some fs need to know the block count, if you
> want to create a sized fs. For example if we want to make 512m ext4 and xfs:
>
> xfs can directly use mkfs -t xfs -d size=512m device
>
> but mkfs.ext4 need to do like: mkfs -t ext4 -b $block_size device
> 512*1024*1024/$block_size
>
> So we need to know block size for some fs, as I know udf fs need to know
> block count too.
>
And even if not for extX fs, I don't need tst_mkfs_sized() function. If for
XFS, the fs_opts parameter of tst_mkfs() already can do that by:
const char *fs_opts[5] = {"-b", "size=1024", "-d", "size=100m" NULL};
But make a sized extX fs, need to know how many block counts (fs_size/block_size),
and this block counts need to behind the device name, e.g.
mkfs -t ext4 -b 1024 device 100*1024*1024/1024
I can't just write likes above:
const char *fs_opts[4] = {"-b", "1024", "102400" NULL};
So at first demo patch, I add a "|" to separate the parameters which need to before
device name or behind device name.
Or I said another method, add a new parameter for tst_mkfs(), named "fs_opts2", which
store all paramters for mkfs and need to behind the device name.
Thanks,
Zorro
next prev parent reply other threads:[~2016-03-09 16:01 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-08 13:35 [LTP] [PATCH 1/2] lib/tst_mkfs: new tst_mkfs_sized function for create appointed size fs Zorro Lang
2016-03-08 13:35 ` [LTP] [PATCH 2/2] mmap16: fix ETIMEDOUT error if test device is too large Zorro Lang
2016-03-09 2:22 ` Eryu Guan
2016-03-09 3:12 ` Zirong Lang
2016-03-09 13:07 ` [LTP] [PATCH 1/2] lib/tst_mkfs: new tst_mkfs_sized function for create appointed size fs Cyril Hrubis
2016-03-09 15:31 ` Zirong Lang
2016-03-09 15:52 ` Cyril Hrubis
2016-03-09 16:05 ` Zirong Lang
2016-03-09 16:09 ` Cyril Hrubis
2016-03-09 16:30 ` Zirong Lang
2016-03-09 17:43 ` Cyril Hrubis
2016-03-10 1:45 ` Zirong Lang
2016-03-10 10:04 ` Cyril Hrubis
2016-03-10 12:00 ` Zirong Lang
2016-03-10 12:19 ` Cyril Hrubis
2016-03-10 13:30 ` Zirong Lang
2016-03-10 14:06 ` Cyril Hrubis
2016-03-10 16:24 ` Zirong Lang
2016-03-14 17:15 ` Cyril Hrubis
2016-03-09 16:01 ` Zirong Lang [this message]
2016-03-09 13:09 ` Cyril Hrubis
2016-03-09 15:09 ` Zirong Lang
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=1806320002.27803455.1457539292136.JavaMail.zimbra@redhat.com \
--to=zlang@redhat.com \
--cc=ltp@lists.linux.it \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox