public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch
@ 2006-09-21 22:33 Eric Sandeen
  2006-09-22  1:03 ` David Chinner
  2006-09-22  2:03 ` Timothy Shimmin
  0 siblings, 2 replies; 8+ messages in thread
From: Eric Sandeen @ 2006-09-21 22:33 UTC (permalink / raw)
  To: Linux Kernel Mailing List, xfs mailing list

The inode diet patch in -mm unhooked xfs_preferred_iosize from the stat call:

--- a/fs/xfs/linux-2.6/xfs_vnode.c
+++ b/fs/xfs/linux-2.6/xfs_vnode.c
@@ -122,7 +122,6 @@ vn_revalidate_core(
        inode->i_blocks     = vap->va_nblocks;
        inode->i_mtime      = vap->va_mtime;
        inode->i_ctime      = vap->va_ctime;
-       inode->i_blksize    = vap->va_blocksize;
        if (vap->va_xflags & XFS_XFLAG_IMMUTABLE)

This in turn breaks the largeio mount option for xfs:

  largeio/nolargeio
        If "nolargeio" is specified, the optimal I/O reported in
        st_blksize by stat(2) will be as small as possible to allow user
        applications to avoid inefficient read/modify/write I/O.
        If "largeio" specified, a filesystem that has a "swidth" specified
        will return the "swidth" value (in bytes) in st_blksize. If the
        filesystem does not have a "swidth" specified but does specify
        an "allocsize" then "allocsize" (in bytes) will be returned
        instead.
        If neither of these two options are specified, then filesystem
        will behave as if "nolargeio" was specified.

and the (undocumented?) allocsize mount option as well.

For a filesystem like this with sunit/swidth specified,

meta-data=/dev/sda1              isize=512    agcount=32, agsize=7625840 blks
         =                       sectsz=512   attr=0
data     =                       bsize=4096   blocks=244026880, imaxpct=25
         =                       sunit=16     swidth=16 blks, unwritten=1
naming   =version 2              bsize=4096
log      =internal               bsize=4096   blocks=32768, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0

stat on a stock FC6 kernel w/ the largeio mount option returns only the page size:

[root@link-07]# mount -o largeio /dev/sda1 /mnt/test/
[root@link-07]# stat -c %o /mnt/test/foo
4096

with the following patch, it does what it should:

[root@link-07]# mount -o largeio /dev/sda1 /mnt/test/
[root@link-07]# stat -c %o /mnt/test/foo
65536

same goes for filesystems w/o sunit,swidth but with the allocsize mount option.

stock:
[root@link-07]# mount -o largeio,allocsize=32768 /dev/sda1 /mnt/test/
[root@link-07]# stat -c %o /mnt/test/foo
4096

w/ patch:
[root@link-07# mount -o largeio,allocsize=32768 /dev/sda1 /mnt/test/
[root@link-07]# stat -c %o /mnt/test/foo
32768

Signed-off-by: Eric Sandeen <sandeen@sandeen.net>

XFS guys, does this look ok?

Index: linux-2.6.18/fs/xfs/linux-2.6/xfs_iops.c
===================================================================
--- linux-2.6.18.orig/fs/xfs/linux-2.6/xfs_iops.c
+++ linux-2.6.18/fs/xfs/linux-2.6/xfs_iops.c
@@ -623,12 +623,16 @@ xfs_vn_getattr(
 {
 	struct inode	*inode = dentry->d_inode;
 	bhv_vnode_t	*vp = vn_from_inode(inode);
+	xfs_inode_t	*ip;
 	int		error = 0;
 
 	if (unlikely(vp->v_flag & VMODIFIED))
 		error = vn_revalidate(vp);
-	if (!error)
+	if (!error) {
 		generic_fillattr(inode, stat);
+		ip = xfs_vtoi(vp);
+		stat->blksize = xfs_preferred_iosize(ip->i_mount);
+	}
 	return -error;
 }
 



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch
  2006-09-21 22:33 [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch Eric Sandeen
@ 2006-09-22  1:03 ` David Chinner
  2006-09-22  2:03 ` Timothy Shimmin
  1 sibling, 0 replies; 8+ messages in thread
From: David Chinner @ 2006-09-22  1:03 UTC (permalink / raw)
  To: Eric Sandeen; +Cc: Linux Kernel Mailing List, xfs mailing list

On Thu, Sep 21, 2006 at 05:33:24PM -0500, Eric Sandeen wrote:
> The inode diet patch in -mm unhooked xfs_preferred_iosize from the stat call:
....
> Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
> 
> XFS guys, does this look ok?
>
> Index: linux-2.6.18/fs/xfs/linux-2.6/xfs_iops.c
> ===================================================================
> --- linux-2.6.18.orig/fs/xfs/linux-2.6/xfs_iops.c
> +++ linux-2.6.18/fs/xfs/linux-2.6/xfs_iops.c
> @@ -623,12 +623,16 @@ xfs_vn_getattr(
>  {
>  	struct inode	*inode = dentry->d_inode;
>  	bhv_vnode_t	*vp = vn_from_inode(inode);
> +	xfs_inode_t	*ip;
>  	int		error = 0;
>  
>  	if (unlikely(vp->v_flag & VMODIFIED))
>  		error = vn_revalidate(vp);
> -	if (!error)
> +	if (!error) {
>  		generic_fillattr(inode, stat);
> +		ip = xfs_vtoi(vp);
> +		stat->blksize = xfs_preferred_iosize(ip->i_mount);
> +	}
>  	return -error;
>  }

ACK. Looks good, Eric. Good catch.

Cheers,

Dave.
-- 
Dave Chinner
Principal Engineer
SGI Australian Software Group

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch
  2006-09-21 22:33 [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch Eric Sandeen
  2006-09-22  1:03 ` David Chinner
@ 2006-09-22  2:03 ` Timothy Shimmin
  2006-09-22  2:23   ` Eric Sandeen
  2006-09-22 23:10   ` Andrew Morton
  1 sibling, 2 replies; 8+ messages in thread
From: Timothy Shimmin @ 2006-09-22  2:03 UTC (permalink / raw)
  To: Eric Sandeen; +Cc: Linux Kernel Mailing List, xfs mailing list

Hi Eric,

Eric Sandeen wrote:
> The inode diet patch in -mm unhooked xfs_preferred_iosize from the stat call:
> 
> --- a/fs/xfs/linux-2.6/xfs_vnode.c
> +++ b/fs/xfs/linux-2.6/xfs_vnode.c
> @@ -122,7 +122,6 @@ vn_revalidate_core(
>         inode->i_blocks     = vap->va_nblocks;
>         inode->i_mtime      = vap->va_mtime;
>         inode->i_ctime      = vap->va_ctime;
> -       inode->i_blksize    = vap->va_blocksize;
>         if (vap->va_xflags & XFS_XFLAG_IMMUTABLE)
> 
> This in turn breaks the largeio mount option for xfs:
> 
>   largeio/nolargeio
>         If "nolargeio" is specified, the optimal I/O reported in
>         st_blksize by stat(2) will be as small as possible to allow user
>         applications to avoid inefficient read/modify/write I/O.
>         If "largeio" specified, a filesystem that has a "swidth" specified
>         will return the "swidth" value (in bytes) in st_blksize. If the
>         filesystem does not have a "swidth" specified but does specify
>         an "allocsize" then "allocsize" (in bytes) will be returned
>         instead.
>         If neither of these two options are specified, then filesystem
>         will behave as if "nolargeio" was specified.
> 
> and the (undocumented?) allocsize mount option as well.
> 
> For a filesystem like this with sunit/swidth specified,
> 
> meta-data=/dev/sda1              isize=512    agcount=32, agsize=7625840 blks
>          =                       sectsz=512   attr=0
> data     =                       bsize=4096   blocks=244026880, imaxpct=25
>          =                       sunit=16     swidth=16 blks, unwritten=1
> naming   =version 2              bsize=4096
> log      =internal               bsize=4096   blocks=32768, version=1
>          =                       sectsz=512   sunit=0 blks
> realtime =none                   extsz=65536  blocks=0, rtextents=0
> 
> stat on a stock FC6 kernel w/ the largeio mount option returns only the page size:
> 
> [root@link-07]# mount -o largeio /dev/sda1 /mnt/test/
> [root@link-07]# stat -c %o /mnt/test/foo
> 4096
> 
> with the following patch, it does what it should:
> 
> [root@link-07]# mount -o largeio /dev/sda1 /mnt/test/
> [root@link-07]# stat -c %o /mnt/test/foo
> 65536
> 
> same goes for filesystems w/o sunit,swidth but with the allocsize mount option.
> 
> stock:
> [root@link-07]# mount -o largeio,allocsize=32768 /dev/sda1 /mnt/test/
> [root@link-07]# stat -c %o /mnt/test/foo
> 4096
> 
> w/ patch:
> [root@link-07# mount -o largeio,allocsize=32768 /dev/sda1 /mnt/test/
> [root@link-07]# stat -c %o /mnt/test/foo
> 32768
> 
> Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
> 
> XFS guys, does this look ok?
> 
> Index: linux-2.6.18/fs/xfs/linux-2.6/xfs_iops.c
> ===================================================================
> --- linux-2.6.18.orig/fs/xfs/linux-2.6/xfs_iops.c
> +++ linux-2.6.18/fs/xfs/linux-2.6/xfs_iops.c
> @@ -623,12 +623,16 @@ xfs_vn_getattr(
>  {
>  	struct inode	*inode = dentry->d_inode;
>  	bhv_vnode_t	*vp = vn_from_inode(inode);
> +	xfs_inode_t	*ip;
>  	int		error = 0;
>  
>  	if (unlikely(vp->v_flag & VMODIFIED))
>  		error = vn_revalidate(vp);
> -	if (!error)
> +	if (!error) {
>  		generic_fillattr(inode, stat);
> +		ip = xfs_vtoi(vp);
> +		stat->blksize = xfs_preferred_iosize(ip->i_mount);
> +	}
>  	return -error;
>  }
>  

Looked at your patch and then at our xfs code in the tree and
the existing code is different than what yours is based on.
I then noticed in the logs Nathan has actually made changes for this:

----------------------------
revision 1.254
date: 2006/07/17 10:46:05;  author: nathans;  state: Exp;  lines: +20 -5
modid: xfs-linux-melb:xfs-kern:26565a
Update XFS for i_blksize removal from generic inode structure
----------------------------
I even reviewed the change (and I don't remember it - getting old).

I looked at the mods scheduled for 2.6.19 and this is one of them.

So the fix for this is coming soon (and the fix is different from the
one above).

Cheers,
Tim.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch
  2006-09-22  2:03 ` Timothy Shimmin
@ 2006-09-22  2:23   ` Eric Sandeen
  2006-09-22 23:10   ` Andrew Morton
  1 sibling, 0 replies; 8+ messages in thread
From: Eric Sandeen @ 2006-09-22  2:23 UTC (permalink / raw)
  To: Timothy Shimmin; +Cc: Linux Kernel Mailing List, xfs mailing list

Timothy Shimmin wrote:

> Looked at your patch and then at our xfs code in the tree and
> the existing code is different than what yours is based on.
> I then noticed in the logs Nathan has actually made changes for this:
> 
> ----------------------------
> revision 1.254
> date: 2006/07/17 10:46:05;  author: nathans;  state: Exp;  lines: +20 -5
> modid: xfs-linux-melb:xfs-kern:26565a
> Update XFS for i_blksize removal from generic inode structure
> ----------------------------
> I even reviewed the change (and I don't remember it - getting old).
> 
> I looked at the mods scheduled for 2.6.19 and this is one of them.
> 
> So the fix for this is coming soon (and the fix is different from the
> one above).


Ah, ok, thanks guys.  Should have checked CVS I guess.

-Eric

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch
  2006-09-22  2:03 ` Timothy Shimmin
  2006-09-22  2:23   ` Eric Sandeen
@ 2006-09-22 23:10   ` Andrew Morton
  2006-09-22 23:19     ` Eric Sandeen
  2006-09-25  8:02     ` Timothy Shimmin
  1 sibling, 2 replies; 8+ messages in thread
From: Andrew Morton @ 2006-09-22 23:10 UTC (permalink / raw)
  To: Timothy Shimmin; +Cc: Eric Sandeen, Linux Kernel Mailing List, xfs mailing list

On Fri, 22 Sep 2006 12:03:30 +1000
Timothy Shimmin <tes@sgi.com> wrote:

> Hi Eric,
> 
> Eric Sandeen wrote:
> > The inode diet patch in -mm unhooked xfs_preferred_iosize from the stat call:
> > 
> > --- a/fs/xfs/linux-2.6/xfs_vnode.c
> > +++ b/fs/xfs/linux-2.6/xfs_vnode.c
> > @@ -122,7 +122,6 @@ vn_revalidate_core(
> >         inode->i_blocks     = vap->va_nblocks;
> >         inode->i_mtime      = vap->va_mtime;
> >         inode->i_ctime      = vap->va_ctime;
> > -       inode->i_blksize    = vap->va_blocksize;
> >         if (vap->va_xflags & XFS_XFLAG_IMMUTABLE)
> > 
> > This in turn breaks the largeio mount option for xfs:
> > 
> >   largeio/nolargeio
> >         If "nolargeio" is specified, the optimal I/O reported in
> >         st_blksize by stat(2) will be as small as possible to allow user
> >         applications to avoid inefficient read/modify/write I/O.
> >         If "largeio" specified, a filesystem that has a "swidth" specified
> >         will return the "swidth" value (in bytes) in st_blksize. If the
> >         filesystem does not have a "swidth" specified but does specify
> >         an "allocsize" then "allocsize" (in bytes) will be returned
> >         instead.
> >         If neither of these two options are specified, then filesystem
> >         will behave as if "nolargeio" was specified.
> > 
> > and the (undocumented?) allocsize mount option as well.
> > 
> > For a filesystem like this with sunit/swidth specified,
> > 
> > meta-data=/dev/sda1              isize=512    agcount=32, agsize=7625840 blks
> >          =                       sectsz=512   attr=0
> > data     =                       bsize=4096   blocks=244026880, imaxpct=25
> >          =                       sunit=16     swidth=16 blks, unwritten=1
> > naming   =version 2              bsize=4096
> > log      =internal               bsize=4096   blocks=32768, version=1
> >          =                       sectsz=512   sunit=0 blks
> > realtime =none                   extsz=65536  blocks=0, rtextents=0
> > 
> > stat on a stock FC6 kernel w/ the largeio mount option returns only the page size:
> > 
> > [root@link-07]# mount -o largeio /dev/sda1 /mnt/test/
> > [root@link-07]# stat -c %o /mnt/test/foo
> > 4096
> > 
> > with the following patch, it does what it should:
> > 
> > [root@link-07]# mount -o largeio /dev/sda1 /mnt/test/
> > [root@link-07]# stat -c %o /mnt/test/foo
> > 65536
> > 
> > same goes for filesystems w/o sunit,swidth but with the allocsize mount option.
> > 
> > stock:
> > [root@link-07]# mount -o largeio,allocsize=32768 /dev/sda1 /mnt/test/
> > [root@link-07]# stat -c %o /mnt/test/foo
> > 4096
> > 
> > w/ patch:
> > [root@link-07# mount -o largeio,allocsize=32768 /dev/sda1 /mnt/test/
> > [root@link-07]# stat -c %o /mnt/test/foo
> > 32768
> > 
> > Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
> > 
> > XFS guys, does this look ok?
> > 
> > Index: linux-2.6.18/fs/xfs/linux-2.6/xfs_iops.c
> > ===================================================================
> > --- linux-2.6.18.orig/fs/xfs/linux-2.6/xfs_iops.c
> > +++ linux-2.6.18/fs/xfs/linux-2.6/xfs_iops.c
> > @@ -623,12 +623,16 @@ xfs_vn_getattr(
> >  {
> >  	struct inode	*inode = dentry->d_inode;
> >  	bhv_vnode_t	*vp = vn_from_inode(inode);
> > +	xfs_inode_t	*ip;
> >  	int		error = 0;
> >  
> >  	if (unlikely(vp->v_flag & VMODIFIED))
> >  		error = vn_revalidate(vp);
> > -	if (!error)
> > +	if (!error) {
> >  		generic_fillattr(inode, stat);
> > +		ip = xfs_vtoi(vp);
> > +		stat->blksize = xfs_preferred_iosize(ip->i_mount);
> > +	}
> >  	return -error;
> >  }
> >  
> 
> Looked at your patch and then at our xfs code in the tree and
> the existing code is different than what yours is based on.
> I then noticed in the logs Nathan has actually made changes for this:
> 
> ----------------------------
> revision 1.254
> date: 2006/07/17 10:46:05;  author: nathans;  state: Exp;  lines: +20 -5
> modid: xfs-linux-melb:xfs-kern:26565a
> Update XFS for i_blksize removal from generic inode structure
> ----------------------------
> I even reviewed the change (and I don't remember it - getting old).
> 
> I looked at the mods scheduled for 2.6.19 and this is one of them.
> 
> So the fix for this is coming soon (and the fix is different from the
> one above).
> 

eh?  Eric's patch is based on -mm, which includes the XFS git tree.  If I
go and merge the inode-diet patches from -mm, XFS gets broken until you
guys merge the above mystery patch.  (I prefer to merge the -mm patches
after all the git trees have gone, but sometimes maintainers dawdle and I
get bored of waiting).

Is git://oss.sgi.com:8090/nathans/xfs-2.6 obsolete, or are you hiding stuff
from me?  ;)



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch
  2006-09-22 23:10   ` Andrew Morton
@ 2006-09-22 23:19     ` Eric Sandeen
  2006-09-22 23:34       ` Andrew Morton
  2006-09-25  8:02     ` Timothy Shimmin
  1 sibling, 1 reply; 8+ messages in thread
From: Eric Sandeen @ 2006-09-22 23:19 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Timothy Shimmin, Linux Kernel Mailing List, xfs mailing list

Andrew Morton wrote:

>> So the fix for this is coming soon (and the fix is different from the
>> one above).
>>
> 
> eh?  Eric's patch is based on -mm, which includes the XFS git tree.  If I
> go and merge the inode-diet patches from -mm, XFS gets broken until you
> guys merge the above mystery patch.  (I prefer to merge the -mm patches
> after all the git trees have gone, but sometimes maintainers dawdle and I
> get bored of waiting).
> 
> Is git://oss.sgi.com:8090/nathans/xfs-2.6 obsolete, or are you hiding stuff
> from me?  ;)
> 
> 
well it's in cvs:

http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.254&r2=text&tr2=1.253&f=h

but I'm too lazy to check git on a friday evening. :)

Well, sgi-guys, I'll let you sort out which patch you want.  Sorry for not 
checking cvs first!

-Eric


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch
  2006-09-22 23:19     ` Eric Sandeen
@ 2006-09-22 23:34       ` Andrew Morton
  0 siblings, 0 replies; 8+ messages in thread
From: Andrew Morton @ 2006-09-22 23:34 UTC (permalink / raw)
  To: Eric Sandeen; +Cc: Timothy Shimmin, Linux Kernel Mailing List, xfs mailing list

On Fri, 22 Sep 2006 18:19:18 -0500
Eric Sandeen <sandeen@sandeen.net> wrote:

> Andrew Morton wrote:
> 
> >> So the fix for this is coming soon (and the fix is different from the
> >> one above).
> >>
> > 
> > eh?  Eric's patch is based on -mm, which includes the XFS git tree.  If I
> > go and merge the inode-diet patches from -mm, XFS gets broken until you
> > guys merge the above mystery patch.  (I prefer to merge the -mm patches
> > after all the git trees have gone, but sometimes maintainers dawdle and I
> > get bored of waiting).
> > 
> > Is git://oss.sgi.com:8090/nathans/xfs-2.6 obsolete, or are you hiding stuff
> > from me?  ;)
> > 
> > 
> well it's in cvs:

That's nearly four months old!

> http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.254&r2=text&tr2=1.253&f=h

<checks to see if the changelog is in Aramaic too>



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch
  2006-09-22 23:10   ` Andrew Morton
  2006-09-22 23:19     ` Eric Sandeen
@ 2006-09-25  8:02     ` Timothy Shimmin
  1 sibling, 0 replies; 8+ messages in thread
From: Timothy Shimmin @ 2006-09-25  8:02 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Eric Sandeen, Linux Kernel Mailing List, xfs mailing list

Andrew Morton wrote:
> On Fri, 22 Sep 2006 12:03:30 +1000

>> Looked at your patch and then at our xfs code in the tree and
>> the existing code is different than what yours is based on.
>> I then noticed in the logs Nathan has actually made changes for this:
>>
>> ----------------------------
>> revision 1.254
>> date: 2006/07/17 10:46:05;  author: nathans;  state: Exp;  lines: +20 -5
>> modid: xfs-linux-melb:xfs-kern:26565a
>> Update XFS for i_blksize removal from generic inode structure
>> ----------------------------
>> I even reviewed the change (and I don't remember it - getting old).
>>
>> I looked at the mods scheduled for 2.6.19 and this is one of them.
>>
>> So the fix for this is coming soon (and the fix is different from the
>> one above).
>>
> 
> eh?  Eric's patch is based on -mm, which includes the XFS git tree.  If I
> go and merge the inode-diet patches from -mm, XFS gets broken until you
> guys merge the above mystery patch.  (I prefer to merge the -mm patches
> after all the git trees have gone, but sometimes maintainers dawdle and I
> get bored of waiting).
> 
> Is git://oss.sgi.com:8090/nathans/xfs-2.6 obsolete, or are you hiding stuff
> from me?  ;)
> 
:)
We're still getting our act together since Nathan is no longer here.
Going forward the new git tree is at:
     git://oss.sgi.com:8090/xfs/xfs-2.6

This has some more recent changes than the "nathans" one but
is far from up to date with the internal sgi tree and the external
cvs tree (as you noticed with the nathans one:).

I will get the "xfs" one updated in the next day or so.

(Aside: for some strange reason, the "nathans" one has 3 extra
  mods (commits) and as expected (to me:) the "xfs" one has 10 extra
  mods (commits) and there is about 46 mods (including missing 3)
  pending for the "xfs" tree.
  If we end up moving from our internal SCM to git at some point,
  this could make the updates less of a hassle:).


--Tim



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-09-25  8:02 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-21 22:33 [PATCH -mm] rescue large xfs preferred iosize from the inode diet patch Eric Sandeen
2006-09-22  1:03 ` David Chinner
2006-09-22  2:03 ` Timothy Shimmin
2006-09-22  2:23   ` Eric Sandeen
2006-09-22 23:10   ` Andrew Morton
2006-09-22 23:19     ` Eric Sandeen
2006-09-22 23:34       ` Andrew Morton
2006-09-25  8:02     ` Timothy Shimmin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox