On Tue, 20 Mar 2012, [email protected] wrote:

----- Original Message -----
From: RW <[email protected]>
To: [email protected]
Date: Sun, 18 Mar 2012 13:41:56 +0000
Subject: Re: BUG: REL 9.0 - MD malloc of custom sector size

On Sun, 18 Mar 2012 14:01:39 +0100
[email protected] wrote:

man mdconfig
----
-S sectorsize to use for malloc backed device
----

I want to create MD device, with sector size of 4 Kb.

It is CRITICAL to NOT append ANY suffixes, when specifing size, via
'-s' flag in order to use sectors, to set it's size. # mdconfig -a -t
malloc -S 4096 -s 32768

This should created dev of 128 Mb in size.
32768 sectors * 4 Kb each = 131072 Kb = 128 Mb
Not! It created dev of 16 Mb in size, because sector size remained at
512 bytes.


From mdconfig 8

"Size is the number of 512 byte sectors unless ..."

Looks to me like it's doing what it said it would.

BTW are you sure you want to use  "-t malloc". This keeps the files
(even the deleted ones) in memory unconditionally  while ordinary
process memory is paged-out.


My MAIN reason to hassle with MD here, is to test a custom sector size.
This can be done with '-S' flag only, in order to set sectorsize of /dev/md*
But as it is malloc ONLY option/flag, I must combine it with '-t malloc'

Then I've defined it's size by amount of sectors and as I've redefined size of 1 sector, it simply isn't doing it's task. Because it enforces hardcoded size of 512 bytes, so documentation should not misleadingly refer to sector in any way, but a hardcode value of 0.5 Kb, no matter of real/actual sector size is.

It should not be technically challenging to cause mdconfig to have the -s size argument in terms of -S sectorsize sized sectors; the following would probably suffice (untested):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Index: mdconfig.c
===================================================================
--- mdconfig.c  (revision 233159)
+++ mdconfig.c  (working copy)
@@ -94,16 +94,19 @@
 int
 main(int argc, char **argv)
 {
-       int ch, fd, i, vflag;
+       int ch, fd, i, vflag, sflag;
        char *p;
        char *fflag = NULL, *tflag = NULL, *uflag = NULL;
+       unsigned bsize;

        bzero(&mdio, sizeof(mdio));
        mdio.md_file = malloc(PATH_MAX);
        if (mdio.md_file == NULL)
                err(1, "could not allocate memory");
        vflag = 0;
+       sflag = 0;
        bzero(mdio.md_file, PATH_MAX);
+       bsize = DEV_BSIZE;

        if (argc == 1)
                usage();
@@ -186,11 +189,12 @@
                        break;
                case 'S':
                        mdio.md_sectorsize = strtoul(optarg, &p, 0);
+                       bsize = mdio.md_sectorsize;
                        break;
                case 's':
                        mdio.md_mediasize = (off_t)strtoumax(optarg, &p, 0);
                        if (p == NULL || *p == '\0')
-                               mdio.md_mediasize *= DEV_BSIZE;
+                               sflag = 1;
                        else if (*p == 'b' || *p == 'B')
                                ; /* do nothing */
                        else if (*p == 'k' || *p == 'K')
@@ -232,6 +236,9 @@
        if (action == UNSET)
                action = ATTACH;

+       if (sflag == 1)
+               mdio.md_mediasize *= bsize;
+
        if (action == ATTACH) {
                if (tflag == NULL) {
                        /*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Or would you prefer a man page change?

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Index: mdconfig.8
===================================================================
--- mdconfig.8  (revision 233159)
+++ mdconfig.8  (working copy)
@@ -132,7 +132,7 @@
 .It Fl s Ar size
 Size of the memory disk.
 .Ar Size
-is the number of 512 byte sectors unless suffixed with a
+is measured in increments of 512 byes unless suffixed with a
 .Cm b , k , m , g ,
 or
 .Cm t
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

BTW I do not see where -S is a malloc-only option; please show the command line and error message using a vnode- or swap-backed device.

-Ben Kaduk
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[email protected]"

Reply via email to