From owner-freebsd-geom@FreeBSD.ORG Tue Jul 4 20:01:26 2006 Return-Path: X-Original-To: freebsd-geom@freebsd.org Delivered-To: freebsd-geom@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5618716A4E7 for ; Tue, 4 Jul 2006 20:01:26 +0000 (UTC) (envelope-from arne_woerner@yahoo.com) Received: from web30301.mail.mud.yahoo.com (web30301.mail.mud.yahoo.com [68.142.200.94]) by mx1.FreeBSD.org (Postfix) with SMTP id B852643D49 for ; Tue, 4 Jul 2006 20:01:25 +0000 (GMT) (envelope-from arne_woerner@yahoo.com) Received: (qmail 25469 invoked by uid 60001); 4 Jul 2006 20:01:24 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=Message-ID:Received:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=DR6ZMMwxYxNDawUq6fW5ZcVxVpJFSbfgmLvZC939FUtrJMGCtmE5syCbQIZ76IGtau0gi50AVuqeU7HYHkWwnQrr/T8gVW5ccb7JnHvNRGKQli9nH1kHqwoDeM57PWcxWSiDRrK0SR0jWQVjR8tsNAC+cTsYoHmDO+EEm/HcfDw= ; Message-ID: <20060704200124.25467.qmail@web30301.mail.mud.yahoo.com> Received: from [213.54.66.208] by web30301.mail.mud.yahoo.com via HTTP; Tue, 04 Jul 2006 13:01:24 PDT Date: Tue, 4 Jul 2006 13:01:24 -0700 (PDT) From: "R. B. Riddick" To: freebsd-geom@freebsd.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-1648963630-1152043284=:13211" Content-Transfer-Encoding: 8bit Subject: new class / geom_cache / request for comments X-BeenThere: freebsd-geom@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: GEOM-specific discussions and implementations List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Jul 2006 20:01:26 -0000 --0-1648963630-1152043284=:13211 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Content-Id: Content-Disposition: inline Hiho! I just wrote a new(?) GEOM class: geom_cache It is my very first GEOM class and my first larger kernel code... I took it mostly from geom_concat... :-) It was quite easy to change the behaviour of geom_concat... The advantage of geom_cache is, that (even if we have a hard disc with a cache) we can avoid reading the same area twice. I cared for segmentation of the cache space a little bit by using a stripe size. The cache is always clean (hopefully), so that it should not be dangerous to use geom_cache (if I did everything right enough). I attached a bzip'ed tar file although it is about 15KB large. I would be glad, 1. if somebody tells me, what I did wrong (especially that license stuff and the man page (I dont know man page language) might be wrong) and 2. if somebody can use it. I plan to use it for my next GEOM class (geom_raid5), where it might be useful in case of sequential read from a degraded provider (or is there a smarter way to do it?). Bye Arne __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --0-1648963630-1152043284=:13211 Content-Type: application/octet-stream; name="geom_cache.tbz" Content-Transfer-Encoding: base64 Content-Description: 421534077-geom_cache.tbz Content-Disposition: attachment; filename="geom_cache.tbz" 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 Appe+zRMF77GMcYPxlEn/4u5IpwoSAO/YaqA --0-1648963630-1152043284=:13211--