Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Jan 2006 13:56:29 -0800
From:      Maxim Sobolev <sobomax@portaone.com>
To:        "Wojciech A. Koszek" <dunstan@freebsd.czest.pl>
Cc:        freebsd-current@FreeBSD.ORG
Subject:   Re: [PATCH] Support for large number of md(4) disks
Message-ID:  <43CC168D.9080708@portaone.com>
In-Reply-To: <20060114223019.GA99634@FreeBSD.czest.pl>
References:  <20060114223019.GA99634@FreeBSD.czest.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi,

IMHO there is better approach to fetch unknown amount of data from the 
kernel using ioctl(2) facility. The main idea is that you allocate some 
buffer of size sufficient in 95% of cases (for md(4) I think 8-16 
entries are enough), attach it to some structure which has size of the 
buffer as one of its members and send pointer to that structure as an 
argument to ioctl(2).

Upon receiving this structure the kernel compares size of the buffer 
with amount of information that it needs to send back. If buffer size is 
sufficient to hold this information it copies it out and returns number 
of entries in the buffer as one of members of this structure.

If the buffer size is insufficient, the kernel fills in desired size of 
the buffer in structure members and returns some error code indicating 
that the provided buffer is insufficient. Upon receiving this error 
userland increases the buffer size to the size suggested by the kernel 
(perhaps adding some extra space) and repeats the ioctl(2) calls.

-Maxim

Wojciech A. Koszek wrote:
> Hello,
> 
> Here is a patch for md(4) which fixes current limit for ~95 devices.
> 
> 	http://freebsd.czest.pl/dunstan/FreeBSD/mdconfig-list.1.patch
> 
> (It's possible to create > 95 md(4) based, disks,but they won't be listed
> in mdconfig -l). This change breaks ABI, so both geom_md.ko and
> mdconfig(8) has to be rebuilt.
> 
> Comments are welcome.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?43CC168D.9080708>