* Urgent help needed on an NFS question, please help!!!
@ 2006-08-10 5:04 Xin Zhao
2006-08-10 5:11 ` Neil Brown
0 siblings, 1 reply; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 5:04 UTC (permalink / raw)
To: linux-kernel; +Cc: linux-fsdevel
I just ran into a problem about NFS. It might be a fundmental problem
of my current work. So please help!
I am wondering how NFS guarantees a client didn't get wrong file
attributes. Consider the following scenario:
Suppose we have an NFS server S and two clients C1 and C2.
Now C1 needs to access the file attributes of file X, it first does
lookup() to get the file handle of file X.
After C1 gets X's file handle and before C1 issues the getattr()
request, C2 cuts in. Now C2 deletes file X and creates a new file X1,
which has different name but the same inode number and device ID as
the nonexistent file X.
When C1 issues getattr() with the old file handle, it may get file
attribute on wrong file X1. Is this true?
If not, how NFS avoid this problem? Please direct me to the code that
verifies this.
Many many thanks!
-x
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 5:04 Urgent help needed on an NFS question, please help!!! Xin Zhao
@ 2006-08-10 5:11 ` Neil Brown
2006-08-10 5:54 ` Xin Zhao
2006-08-10 6:04 ` Xin Zhao
0 siblings, 2 replies; 24+ messages in thread
From: Neil Brown @ 2006-08-10 5:11 UTC (permalink / raw)
To: Xin Zhao; +Cc: linux-kernel, linux-fsdevel
On Thursday August 10, uszhaoxin@gmail.com wrote:
> I just ran into a problem about NFS. It might be a fundmental problem
> of my current work. So please help!
>
> I am wondering how NFS guarantees a client didn't get wrong file
> attributes. Consider the following scenario:
>
> Suppose we have an NFS server S and two clients C1 and C2.
>
> Now C1 needs to access the file attributes of file X, it first does
> lookup() to get the file handle of file X.
>
> After C1 gets X's file handle and before C1 issues the getattr()
> request, C2 cuts in. Now C2 deletes file X and creates a new file X1,
> which has different name but the same inode number and device ID as
> the nonexistent file X.
>
> When C1 issues getattr() with the old file handle, it may get file
> attribute on wrong file X1. Is this true?
>
> If not, how NFS avoid this problem? Please direct me to the code that
> verifies this.
Generation numbers.
When the filesystem creates a new file it assigns a random number
as the 'generation' number and stores that in the inode.
This gets included in the filehandle, and checked when the filehandle
lookup is done.
Look for references to 'i_generation' in fs/ext3/*
Other files systems may approach this slightly differently, but the
filesystem is responsible for providing a unique-over-time filehandle,
and 'generation number' is the 'standard' way of doing this.
NeilBrown
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 5:11 ` Neil Brown
@ 2006-08-10 5:54 ` Xin Zhao
2006-08-10 6:03 ` Neil Brown
2006-08-10 6:04 ` Xin Zhao
1 sibling, 1 reply; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 5:54 UTC (permalink / raw)
To: Neil Brown; +Cc: linux-kernel, linux-fsdevel
Many thanks for your kind help!
Your answer is what I expected. But what frustrated me is that I
cannot find the code that verifies the generation number in NFS V3
codes. Do you know where it check the generation number?
Thanks,
-x
On 8/10/06, Neil Brown <neilb@suse.de> wrote:
> On Thursday August 10, uszhaoxin@gmail.com wrote:
> > I just ran into a problem about NFS. It might be a fundmental problem
> > of my current work. So please help!
> >
> > I am wondering how NFS guarantees a client didn't get wrong file
> > attributes. Consider the following scenario:
> >
> > Suppose we have an NFS server S and two clients C1 and C2.
> >
> > Now C1 needs to access the file attributes of file X, it first does
> > lookup() to get the file handle of file X.
> >
> > After C1 gets X's file handle and before C1 issues the getattr()
> > request, C2 cuts in. Now C2 deletes file X and creates a new file X1,
> > which has different name but the same inode number and device ID as
> > the nonexistent file X.
> >
> > When C1 issues getattr() with the old file handle, it may get file
> > attribute on wrong file X1. Is this true?
> >
> > If not, how NFS avoid this problem? Please direct me to the code that
> > verifies this.
>
> Generation numbers.
>
> When the filesystem creates a new file it assigns a random number
> as the 'generation' number and stores that in the inode.
> This gets included in the filehandle, and checked when the filehandle
> lookup is done.
>
> Look for references to 'i_generation' in fs/ext3/*
>
> Other files systems may approach this slightly differently, but the
> filesystem is responsible for providing a unique-over-time filehandle,
> and 'generation number' is the 'standard' way of doing this.
>
> NeilBrown
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 5:54 ` Xin Zhao
@ 2006-08-10 6:03 ` Neil Brown
2006-08-10 15:15 ` Xin Zhao
0 siblings, 1 reply; 24+ messages in thread
From: Neil Brown @ 2006-08-10 6:03 UTC (permalink / raw)
To: Xin Zhao; +Cc: linux-kernel, linux-fsdevel
On Thursday August 10, uszhaoxin@gmail.com wrote:
> Many thanks for your kind help!
>
> Your answer is what I expected. But what frustrated me is that I
> cannot find the code that verifies the generation number in NFS V3
> codes. Do you know where it check the generation number?
NFSD doesn't. The individual filesystem does. You need to look in
the filesystem code.
Some filesystems use common code from fs/exportfs/expfs.c
See "export_iget".
NeilBrown.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 5:11 ` Neil Brown
2006-08-10 5:54 ` Xin Zhao
@ 2006-08-10 6:04 ` Xin Zhao
2006-08-10 6:15 ` Xin Zhao
1 sibling, 1 reply; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 6:04 UTC (permalink / raw)
To: Neil Brown; +Cc: linux-kernel, linux-fsdevel
I think nfs_compare_fh() might do the file handle verification task.
However, it is still possible that AFTER C1 gets a valid file handle,
BUT BEFORE C1 sends out the getattr() request, C2 deletes file X and
creates a different file X1 which has the same inode number. Looks
like the server side must verify the generation number carried in the
file handle. Unfortunately, I didn't find this code at the server
side. Any further insight on this?
Thanks,
Xin
On 8/10/06, Neil Brown <neilb@suse.de> wrote:
> On Thursday August 10, uszhaoxin@gmail.com wrote:
> > I just ran into a problem about NFS. It might be a fundmental problem
> > of my current work. So please help!
> >
> > I am wondering how NFS guarantees a client didn't get wrong file
> > attributes. Consider the following scenario:
> >
> > Suppose we have an NFS server S and two clients C1 and C2.
> >
> > Now C1 needs to access the file attributes of file X, it first does
> > lookup() to get the file handle of file X.
> >
> > After C1 gets X's file handle and before C1 issues the getattr()
> > request, C2 cuts in. Now C2 deletes file X and creates a new file X1,
> > which has different name but the same inode number and device ID as
> > the nonexistent file X.
> >
> > When C1 issues getattr() with the old file handle, it may get file
> > attribute on wrong file X1. Is this true?
> >
> > If not, how NFS avoid this problem? Please direct me to the code that
> > verifies this.
>
> Generation numbers.
>
> When the filesystem creates a new file it assigns a random number
> as the 'generation' number and stores that in the inode.
> This gets included in the filehandle, and checked when the filehandle
> lookup is done.
>
> Look for references to 'i_generation' in fs/ext3/*
>
> Other files systems may approach this slightly differently, but the
> filesystem is responsible for providing a unique-over-time filehandle,
> and 'generation number' is the 'standard' way of doing this.
>
> NeilBrown
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 6:04 ` Xin Zhao
@ 2006-08-10 6:15 ` Xin Zhao
0 siblings, 0 replies; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 6:15 UTC (permalink / raw)
To: Neil Brown; +Cc: linux-kernel, linux-fsdevel
I found where the server checks the generation number. It's in fh_verify(). :)
Many thanks for your help, Neil!
-x
On 8/10/06, Xin Zhao <uszhaoxin@gmail.com> wrote:
> I think nfs_compare_fh() might do the file handle verification task.
> However, it is still possible that AFTER C1 gets a valid file handle,
> BUT BEFORE C1 sends out the getattr() request, C2 deletes file X and
> creates a different file X1 which has the same inode number. Looks
> like the server side must verify the generation number carried in the
> file handle. Unfortunately, I didn't find this code at the server
> side. Any further insight on this?
>
> Thanks,
> Xin
>
> On 8/10/06, Neil Brown <neilb@suse.de> wrote:
> > On Thursday August 10, uszhaoxin@gmail.com wrote:
> > > I just ran into a problem about NFS. It might be a fundmental problem
> > > of my current work. So please help!
> > >
> > > I am wondering how NFS guarantees a client didn't get wrong file
> > > attributes. Consider the following scenario:
> > >
> > > Suppose we have an NFS server S and two clients C1 and C2.
> > >
> > > Now C1 needs to access the file attributes of file X, it first does
> > > lookup() to get the file handle of file X.
> > >
> > > After C1 gets X's file handle and before C1 issues the getattr()
> > > request, C2 cuts in. Now C2 deletes file X and creates a new file X1,
> > > which has different name but the same inode number and device ID as
> > > the nonexistent file X.
> > >
> > > When C1 issues getattr() with the old file handle, it may get file
> > > attribute on wrong file X1. Is this true?
> > >
> > > If not, how NFS avoid this problem? Please direct me to the code that
> > > verifies this.
> >
> > Generation numbers.
> >
> > When the filesystem creates a new file it assigns a random number
> > as the 'generation' number and stores that in the inode.
> > This gets included in the filehandle, and checked when the filehandle
> > lookup is done.
> >
> > Look for references to 'i_generation' in fs/ext3/*
> >
> > Other files systems may approach this slightly differently, but the
> > filesystem is responsible for providing a unique-over-time filehandle,
> > and 'generation number' is the 'standard' way of doing this.
> >
> > NeilBrown
> >
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 6:03 ` Neil Brown
@ 2006-08-10 15:15 ` Xin Zhao
2006-08-10 16:11 ` Matthew Wilcox
0 siblings, 1 reply; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 15:15 UTC (permalink / raw)
To: Neil Brown; +Cc: linux-kernel, linux-fsdevel
Hi,
I am considering another possibility: suppose client C1 does lookup()
on file X and gets a file handle, which include inode number,
generation number and parent's inode number. Before C1 issues
getattr(), C2 move the parent directory to a different place, which
will not change the parent's inode number, neither the file X's inode,
i_generation. So when C1 issues a getattr() request with this file
handle, the server seems to have no way to detect that file X is not
existent at the original path. Instead, the server will returns the
moved X's attributes, which are correct, but semantically wrong. Is
there any way that server deal with this problem?
Thanks a lot!
-x
On 8/10/06, Neil Brown <neilb@suse.de> wrote:
> On Thursday August 10, uszhaoxin@gmail.com wrote:
> > Many thanks for your kind help!
> >
> > Your answer is what I expected. But what frustrated me is that I
> > cannot find the code that verifies the generation number in NFS V3
> > codes. Do you know where it check the generation number?
>
> NFSD doesn't. The individual filesystem does. You need to look in
> the filesystem code.
>
> Some filesystems use common code from fs/exportfs/expfs.c
> See "export_iget".
>
> NeilBrown.
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 15:15 ` Xin Zhao
@ 2006-08-10 16:11 ` Matthew Wilcox
2006-08-10 16:23 ` Xin Zhao
0 siblings, 1 reply; 24+ messages in thread
From: Matthew Wilcox @ 2006-08-10 16:11 UTC (permalink / raw)
To: Xin Zhao; +Cc: Neil Brown, linux-kernel, linux-fsdevel
On Thu, Aug 10, 2006 at 11:15:57AM -0400, Xin Zhao wrote:
> I am considering another possibility: suppose client C1 does lookup()
> on file X and gets a file handle, which include inode number,
> generation number and parent's inode number. Before C1 issues
> getattr(), C2 move the parent directory to a different place, which
> will not change the parent's inode number, neither the file X's inode,
> i_generation. So when C1 issues a getattr() request with this file
> handle, the server seems to have no way to detect that file X is not
> existent at the original path. Instead, the server will returns the
> moved X's attributes, which are correct, but semantically wrong. Is
> there any way that server deal with this problem?
It isn't semantically wrong. There is no way for the application to
distinguish between the events:
open()
stat()
mv
and
open()
mv
stat()
As long as the results are consistent with the former case, it doesn't
matter if the latter case actually happened.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 16:11 ` Matthew Wilcox
@ 2006-08-10 16:23 ` Xin Zhao
2006-08-10 16:54 ` Matthew Wilcox
` (3 more replies)
0 siblings, 4 replies; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 16:23 UTC (permalink / raw)
To: Matthew Wilcox; +Cc: Neil Brown, linux-kernel, linux-fsdevel
That makes sense.
Can we make the following two conclusions?
1. In a single machine, inode+dev ID+i_generation can uniquely identify a file
2. Given a stored file handle and an inode object received from the
server, an NFS client can safely determine whether this inode
corresponds to the file handle by checking the inode+dev+i_generation.
Thanks,
-x
On 8/10/06, Matthew Wilcox <matthew@wil.cx> wrote:
> On Thu, Aug 10, 2006 at 11:15:57AM -0400, Xin Zhao wrote:
> > I am considering another possibility: suppose client C1 does lookup()
> > on file X and gets a file handle, which include inode number,
> > generation number and parent's inode number. Before C1 issues
> > getattr(), C2 move the parent directory to a different place, which
> > will not change the parent's inode number, neither the file X's inode,
> > i_generation. So when C1 issues a getattr() request with this file
> > handle, the server seems to have no way to detect that file X is not
> > existent at the original path. Instead, the server will returns the
> > moved X's attributes, which are correct, but semantically wrong. Is
> > there any way that server deal with this problem?
>
> It isn't semantically wrong. There is no way for the application to
> distinguish between the events:
>
> open()
> stat()
> mv
>
> and
>
> open()
> mv
> stat()
>
> As long as the results are consistent with the former case, it doesn't
> matter if the latter case actually happened.
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 16:23 ` Xin Zhao
@ 2006-08-10 16:54 ` Matthew Wilcox
2006-08-10 17:08 ` Xin Zhao
2006-08-10 17:28 ` Trond Myklebust
` (2 subsequent siblings)
3 siblings, 1 reply; 24+ messages in thread
From: Matthew Wilcox @ 2006-08-10 16:54 UTC (permalink / raw)
To: Xin Zhao; +Cc: Neil Brown, linux-kernel, linux-fsdevel
On Thu, Aug 10, 2006 at 12:23:12PM -0400, Xin Zhao wrote:
> That makes sense.
>
> Can we make the following two conclusions?
> 1. In a single machine, inode+dev ID+i_generation can uniquely identify a
> file
sure.
> 2. Given a stored file handle and an inode object received from the
> server, an NFS client can safely determine whether this inode
> corresponds to the file handle by checking the inode+dev+i_generation.
The NFS client makes up its own inode numbers for use on the local
machine. It doesn't know the device+inode+generation numbers on the
server (and indeed, the server may not even have the concepts of
inodes). To quote RFC 1813:
The file handle contains all the information the server needs to
distinguish an individual file. To the client, the file handle is
opaque. The client stores file handles for use in a later request
and can compare two file handles from the same server for equality by
doing a byte-by-byte comparison, but cannot otherwise interpret the
contents of file handles. If two file handles from the same server
are equal, they must refer to the same file, but if they are not
equal, no conclusions can be drawn. Servers should try to maintain
a one-to-one correspondence between file handles and files, but this
is not required. Clients should use file handle comparisons only to
improve performance, not for correct behavior.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 16:54 ` Matthew Wilcox
@ 2006-08-10 17:08 ` Xin Zhao
2006-08-10 17:38 ` Trond Myklebust
0 siblings, 1 reply; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 17:08 UTC (permalink / raw)
To: Matthew Wilcox; +Cc: Neil Brown, linux-kernel, linux-fsdevel
Well. For regular NFS, because it needs to consider interoperability,
it cannot use file handle as an opaque object.
However, in our case, we essentially derived a VM based data sharing
infrastructure from NFS. This would allow multiple virtual machines in
a single server to share data efficiently. With some tricks, we are
able to export inode cache from server to client. Also, we modify the
file handle composer to carry the server-side inode address, inode
number, i_gen, dev along with a file handle. Upon receiving a file
handle, a client can directly access the inode object in the exported
inode cache and bypass the inter-VM communication.
So, in our case, we don't need to consider interoperability (at least
for now), and we DO know the inode number, generation, as well as
exported device info.
I think this explains why I want to make sure the conclusion is right:
Conclusion: Given a stored file handle and an inode object received from the
server, an NFS client can safely determine whether this inode
corresponds to the file handle by checking the inode+dev+i_generation.
Many thanks for this helpful discussion.
Xin
On 8/10/06, Matthew Wilcox <matthew@wil.cx> wrote:
> On Thu, Aug 10, 2006 at 12:23:12PM -0400, Xin Zhao wrote:
> > That makes sense.
> >
> > Can we make the following two conclusions?
> > 1. In a single machine, inode+dev ID+i_generation can uniquely identify a
> > file
>
> sure.
>
> > 2. Given a stored file handle and an inode object received from the
> > server, an NFS client can safely determine whether this inode
> > corresponds to the file handle by checking the inode+dev+i_generation.
>
> The NFS client makes up its own inode numbers for use on the local
> machine. It doesn't know the device+inode+generation numbers on the
> server (and indeed, the server may not even have the concepts of
> inodes). To quote RFC 1813:
>
> The file handle contains all the information the server needs to
> distinguish an individual file. To the client, the file handle is
> opaque. The client stores file handles for use in a later request
> and can compare two file handles from the same server for equality by
> doing a byte-by-byte comparison, but cannot otherwise interpret the
> contents of file handles. If two file handles from the same server
> are equal, they must refer to the same file, but if they are not
> equal, no conclusions can be drawn. Servers should try to maintain
> a one-to-one correspondence between file handles and files, but this
> is not required. Clients should use file handle comparisons only to
> improve performance, not for correct behavior.
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 16:23 ` Xin Zhao
2006-08-10 16:54 ` Matthew Wilcox
@ 2006-08-10 17:28 ` Trond Myklebust
2006-08-10 18:02 ` Xin Zhao
2006-08-10 17:50 ` Bryan Henderson
2006-08-10 21:00 ` Peter Staubach
3 siblings, 1 reply; 24+ messages in thread
From: Trond Myklebust @ 2006-08-10 17:28 UTC (permalink / raw)
To: Xin Zhao; +Cc: Matthew Wilcox, Neil Brown, linux-kernel, linux-fsdevel
On Thu, 2006-08-10 at 12:23 -0400, Xin Zhao wrote:
> That makes sense.
>
> Can we make the following two conclusions?
> 1. In a single machine, inode+dev ID+i_generation can uniquely identify a file
Not really. The device id is frequently subject to change on server
reboot or device disconnect/reconnect.
> 2. Given a stored file handle and an inode object received from the
> server, an NFS client can safely determine whether this inode
> corresponds to the file handle by checking the inode+dev+i_generation.
No! The file handle is an opaque bag of bytes as far as clients are
concerned. If you change the server, then the filehandle format can and
will change. On linux, even changing the setting of the subtree_checking
export option will suffice to change the filehandle.
Cheers,
Trond
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 17:08 ` Xin Zhao
@ 2006-08-10 17:38 ` Trond Myklebust
0 siblings, 0 replies; 24+ messages in thread
From: Trond Myklebust @ 2006-08-10 17:38 UTC (permalink / raw)
To: Xin Zhao; +Cc: Matthew Wilcox, Neil Brown, linux-kernel, linux-fsdevel
On Thu, 2006-08-10 at 13:08 -0400, Xin Zhao wrote:
> Well. For regular NFS, because it needs to consider interoperability,
> it cannot use file handle as an opaque object.
>
> However, in our case, we essentially derived a VM based data sharing
> infrastructure from NFS. This would allow multiple virtual machines in
> a single server to share data efficiently. With some tricks, we are
> able to export inode cache from server to client. Also, we modify the
> file handle composer to carry the server-side inode address, inode
> number, i_gen, dev along with a file handle. Upon receiving a file
> handle, a client can directly access the inode object in the exported
> inode cache and bypass the inter-VM communication.
The correct way to do this sort of thing is to use pNFS, which has
protocol support for this sort of thing, and is part of the draft NFSv4
minor version 1 specification. See
http://www.ietf.org/internet-drafts/draft-ietf-nfsv4-minorversion1-04.txt
Cheers,
Trond
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 16:23 ` Xin Zhao
2006-08-10 16:54 ` Matthew Wilcox
2006-08-10 17:28 ` Trond Myklebust
@ 2006-08-10 17:50 ` Bryan Henderson
2006-08-10 18:15 ` Xin Zhao
2006-08-10 21:00 ` Peter Staubach
3 siblings, 1 reply; 24+ messages in thread
From: Bryan Henderson @ 2006-08-10 17:50 UTC (permalink / raw)
To: Xin Zhao; +Cc: linux-fsdevel, Matthew Wilcox, Neil Brown
>Can we make the following two conclusions?
>1. In a single machine, inode+dev ID+i_generation can uniquely identify a
file
Without knowing the context, it's hard to say how picky you want to be,
but here are some reasons the conclusion wouldn't be valid:
- In some filesystems, the inode number isn't as unique and stable as
you'd like it to be. In these, the inode
number has no internal use and is just something made up to satisfy
stat(). And no, it doesn't satisfy all
requirements of stat(), but there's a compromise happening. This
compromise is especially visible in
filesystems that can have more than 4G filesystem objects, because
inode numbers are 32 bits.
Consequently, NFS file handles for filesystem objects in these
filesystems do not involve inode numbers.
- In some filesystems, there is no device number to speak of. There's a
made-up one to satisfy Linux structures
designed in the days that a filesystem lived on a disk, but you have
to define some restrictions to consider
that device number usable to uniquely identify a file.
For this reason and others, Linux doesn't always use a device number
in a file handle. In general, it uses an
"export ID."
- In a traditional filesystem such as ext3, you have to define some
restrictions in order for a device number to
help uniquely identify a file. That's because in general, a
filesystem's device number can change, especially
because a disk device's device number can change.
>2. Given a stored file handle and an inode object received from the
>server, an NFS client can safely determine whether this inode
>corresponds to the file handle by checking the inode+dev+i_generation.
There's an unsettling theme in your questions that suggests that the NFS
protocol involves inodes and inode numbers. It doesn't, and I think
assuming it does can lead you down some bad paths. There is no inode
number mentioned in NFS specs, and an NFS client doesn't know what the
inode number of a file on the server is. The individual server decides
how to construct an NFS file handle. In the earliest implementations of
NFS servers, and continuing today in NFS serving of an ext3 filesystem,
the server decides to use inode numbers and device numbers to construct
the NFS file handle. But it doesn't have to.
--
Bryan Henderson IBM Almaden Research Center
San Jose CA Filesystems
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 17:28 ` Trond Myklebust
@ 2006-08-10 18:02 ` Xin Zhao
2006-08-10 19:59 ` Trond Myklebust
0 siblings, 1 reply; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 18:02 UTC (permalink / raw)
To: Trond Myklebust; +Cc: Matthew Wilcox, Neil Brown, linux-kernel, linux-fsdevel
Thanks. Trond.
The device is subject to change when server reboot? I don't quite
understand. If the backing device at the server side is not changed,
how come server reboot will cause device ID change?
One possibilty that can cause device ID to change is exported device
change AFTER server reboots. But this can be detected by adding a
server generation number or device generation number. So maybe we can
say: "In a single machine, inode+dev
ID+i_generation+server_generation can uniquely identify a file". Is
this true?
About your comment on the second conclusion, I already explained in
one of my previous email. We assume that both server and clients are
under our control. That is, we don't consider too much about
interoperability. The file handle format will be static even the NFS
server is changed. Actually, in our inter-VM inode sharing scheme, we
don't even care about the normal file handle contents. Instead, we
only check our extended fields, which include: server-side inode
address, ino, dev info, i_generation and server_generation. An NFS
client first uses the server-side inode address to locate the inode
object in the server inode cache (we dynamically remapped the inode
cache into the client, in order to expedite metadata retrieval and
bypass inter-VM communication). After getting the inode object, the
NFS client has to validate this inode object corresponds to the file
handle so that it can read the right file attributes stored in the
inode. There are many possibilities that can cause a located inode
stores false information: the inode has been released because someone
on the server remove the file, the inode was filled by another file's
inode (other possibilities?). So we must validate the inode before
using the file attributes retrieved from the mapped inode.
That's why we bring up this question.
Also, does someone compare NFS v4's delegation mechanism with the
speculative execution mechanism proposed in SOSP 2005
http://www.cs.cmu.edu/~dga/15-849/papers/speculator-sosp2005.pdf?
What are the pros and cons of these two mechanisms?
I put the content of my previous email below.
----My previous email ---
Well. For regular NFS, because it needs to consider interoperability,
it cannot use file handle as an opaque object.
However, in our case, we essentially derived a VM based data sharing
infrastructure from NFS. This would allow multiple virtual machines in
a single server to share data efficiently. With some tricks, we are
able to export inode cache from server to client. Also, we modify the
file handle composer to carry the server-side inode address, inode
number, i_gen, dev along with a file handle. Upon receiving a file
handle, a client can directly access the inode object in the exported
inode cache and bypass the inter-VM communication.
So, in our case, we don't need to consider interoperability (at least
for now), and we DO know the inode number, generation, as well as
exported device info.
I think this explains why I want to make sure the conclusion is right:
Conclusion: Given a stored file handle and an inode object received from the
server, an NFS client can safely determine whether this inode
corresponds to the file handle by checking the inode+dev+i_generation.
Many thanks for this helpful discussion.
On 8/10/06, Trond Myklebust <trond.myklebust@fys.uio.no> wrote:
> On Thu, 2006-08-10 at 12:23 -0400, Xin Zhao wrote:
> > That makes sense.
> >
> > Can we make the following two conclusions?
> > 1. In a single machine, inode+dev ID+i_generation can uniquely identify a file
>
> Not really. The device id is frequently subject to change on server
> reboot or device disconnect/reconnect.
>
> > 2. Given a stored file handle and an inode object received from the
> > server, an NFS client can safely determine whether this inode
> > corresponds to the file handle by checking the inode+dev+i_generation.
>
> No! The file handle is an opaque bag of bytes as far as clients are
> concerned. If you change the server, then the filehandle format can and
> will change. On linux, even changing the setting of the subtree_checking
> export option will suffice to change the filehandle.
>
> Cheers,
> Trond
>
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 17:50 ` Bryan Henderson
@ 2006-08-10 18:15 ` Xin Zhao
2006-08-11 0:07 ` Bryan Henderson
0 siblings, 1 reply; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 18:15 UTC (permalink / raw)
To: Bryan Henderson; +Cc: linux-fsdevel, Matthew Wilcox, Neil Brown
Hi, Bryan,
You gave several good points here. But can you be more specific: what
file system does not use unique inode? I am sorry for asking this dumb
question. But I am really eager to konw that. Also, you mentioned
that some filesystems have no device number. I guess you are talking
about ramfs or similar file system, right? In our context, we don't
consider this possibility.
I know many people dislike to use inode number or device number in
file handle. NFS specs also avoid mentioning inodes, because it wants
to provide maximum interoperability. But our system is essentially a
NFS derived file system dedicated to sharing data across multiple VMs
in a single virtual server. So we can safely assume that both NFS
client and server are under our control, and no further
interoperabilitiy needs to be considered.
But your points seem to be valid as long as you can give more details
on "some file systems". ;-)
-x
On 8/10/06, Bryan Henderson <hbryan@us.ibm.com> wrote:
> >Can we make the following two conclusions?
> >1. In a single machine, inode+dev ID+i_generation can uniquely identify a
> file
>
> Without knowing the context, it's hard to say how picky you want to be,
> but here are some reasons the conclusion wouldn't be valid:
>
> - In some filesystems, the inode number isn't as unique and stable as
> you'd like it to be. In these, the inode
> number has no internal use and is just something made up to satisfy
> stat(). And no, it doesn't satisfy all
> requirements of stat(), but there's a compromise happening. This
> compromise is especially visible in
> filesystems that can have more than 4G filesystem objects, because
> inode numbers are 32 bits.
>
> Consequently, NFS file handles for filesystem objects in these
> filesystems do not involve inode numbers.
>
> - In some filesystems, there is no device number to speak of. There's a
> made-up one to satisfy Linux structures
> designed in the days that a filesystem lived on a disk, but you have
> to define some restrictions to consider
> that device number usable to uniquely identify a file.
>
> For this reason and others, Linux doesn't always use a device number
> in a file handle. In general, it uses an
> "export ID."
>
> - In a traditional filesystem such as ext3, you have to define some
> restrictions in order for a device number to
> help uniquely identify a file. That's because in general, a
> filesystem's device number can change, especially
> because a disk device's device number can change.
>
> >2. Given a stored file handle and an inode object received from the
> >server, an NFS client can safely determine whether this inode
> >corresponds to the file handle by checking the inode+dev+i_generation.
>
> There's an unsettling theme in your questions that suggests that the NFS
> protocol involves inodes and inode numbers. It doesn't, and I think
> assuming it does can lead you down some bad paths. There is no inode
> number mentioned in NFS specs, and an NFS client doesn't know what the
> inode number of a file on the server is. The individual server decides
> how to construct an NFS file handle. In the earliest implementations of
> NFS servers, and continuing today in NFS serving of an ext3 filesystem,
> the server decides to use inode numbers and device numbers to construct
> the NFS file handle. But it doesn't have to.
>
> --
> Bryan Henderson IBM Almaden Research Center
> San Jose CA Filesystems
>
>
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 18:02 ` Xin Zhao
@ 2006-08-10 19:59 ` Trond Myklebust
2006-08-10 22:25 ` Xin Zhao
` (2 more replies)
0 siblings, 3 replies; 24+ messages in thread
From: Trond Myklebust @ 2006-08-10 19:59 UTC (permalink / raw)
To: Xin Zhao; +Cc: Matthew Wilcox, Neil Brown, linux-kernel, linux-fsdevel
On Thu, 2006-08-10 at 14:02 -0400, Xin Zhao wrote:
> Thanks. Trond.
>
> The device is subject to change when server reboot? I don't quite
> understand. If the backing device at the server side is not changed,
> how come server reboot will cause device ID change?
Things like USB, firewire, and fibre channel allocate their device ids
on the fly. There is no such thing as a fixed device id in those cases.
> About your comment on the second conclusion, I already explained in
> one of my previous email. We assume that both server and clients are
> under our control. That is, we don't consider too much about
> interoperability. The file handle format will be static even the NFS
> server is changed. Actually, in our inter-VM inode sharing scheme, we
> don't even care about the normal file handle contents. Instead, we
> only check our extended fields, which include: server-side inode
> address, ino, dev info, i_generation and server_generation. An NFS
> client first uses the server-side inode address to locate the inode
> object in the server inode cache (we dynamically remapped the inode
> cache into the client, in order to expedite metadata retrieval and
> bypass inter-VM communication). After getting the inode object, the
> NFS client has to validate this inode object corresponds to the file
> handle so that it can read the right file attributes stored in the
> inode. There are many possibilities that can cause a located inode
> stores false information: the inode has been released because someone
> on the server remove the file, the inode was filled by another file's
> inode (other possibilities?). So we must validate the inode before
> using the file attributes retrieved from the mapped inode.
>
> That's why we bring up this question.
Why do this, when people are working on standards and implementations
for doing precisely the above within the NFSv4 protocol?
> Also, does someone compare NFS v4's delegation mechanism with the
> speculative execution mechanism proposed in SOSP 2005
> http://www.cs.cmu.edu/~dga/15-849/papers/speculator-sosp2005.pdf?
>
> What are the pros and cons of these two mechanisms?
Delegations are all about caching. This paper appears to be about
getting round the bottlenecks due to synchronous operations. How are the
two issues related?
Cheers,
Trond
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 16:23 ` Xin Zhao
` (2 preceding siblings ...)
2006-08-10 17:50 ` Bryan Henderson
@ 2006-08-10 21:00 ` Peter Staubach
3 siblings, 0 replies; 24+ messages in thread
From: Peter Staubach @ 2006-08-10 21:00 UTC (permalink / raw)
To: Xin Zhao; +Cc: Matthew Wilcox, Neil Brown, linux-kernel, linux-fsdevel
Xin Zhao wrote:
> That makes sense.
>
> Can we make the following two conclusions?
> 1. In a single machine, inode+dev ID+i_generation can uniquely
> identify a file
> 2. Given a stored file handle and an inode object received from the
> server, an NFS client can safely determine whether this inode
> corresponds to the file handle by checking the inode+dev+i_generation.
>
#1 seems to safe enough to assume.
#2 either doesn't make sense to me or is assuming things about the file
handle
that the client is not allowed to assume. A file handle is an opaque string
of bytes to the client. The only entity allowed to interpret the contents
is the entity which generated the file handle.
---
Is this situation any different than an application opens file, "A".
Another
process then renames "A" to "B". Now, the original application is
reading and
writing from and to a file called "B" and has no knowledge of this.
---
The bottom line is that the file handle uniquely identifies a particular
entity on a file system on the server. The name of the entity does not
matter.
Thanx...
ps
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 19:59 ` Trond Myklebust
@ 2006-08-10 22:25 ` Xin Zhao
2006-08-11 0:44 ` Trond Myklebust
2006-08-10 22:28 ` Xin Zhao
2006-08-10 23:42 ` Bryan Henderson
2 siblings, 1 reply; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 22:25 UTC (permalink / raw)
To: Trond Myklebust; +Cc: Matthew Wilcox, Neil Brown, linux-kernel, linux-fsdevel
The inter-VM inode helps reduce communication cost used to retrieve
file attributes in a VM environment. In a network environment, it is
possible for a client to direct see the inode caches of the server.
But in the virtual server environment, where both client and server
running on the same physical host, this would be possible.
If clients have read-only access to server's inode cache, they can
directly retrieve file attributes without incurring expensive
getattr() rpc call. Of couse the delegation is able to allow a client
to trust local cached file attributes without worry about server
change. But this only works when file is not shared by multiple
clients. Right? Does NFS4 has some other mechanisms that can further
improve performance on metadata access?
Thanks,
-x
On 8/10/06, Trond Myklebust <trond.myklebust@fys.uio.no> wrote:
> On Thu, 2006-08-10 at 14:02 -0400, Xin Zhao wrote:
> > Thanks. Trond.
> >
> > The device is subject to change when server reboot? I don't quite
> > understand. If the backing device at the server side is not changed,
> > how come server reboot will cause device ID change?
>
> Things like USB, firewire, and fibre channel allocate their device ids
> on the fly. There is no such thing as a fixed device id in those cases.
>
> > About your comment on the second conclusion, I already explained in
> > one of my previous email. We assume that both server and clients are
> > under our control. That is, we don't consider too much about
> > interoperability. The file handle format will be static even the NFS
> > server is changed. Actually, in our inter-VM inode sharing scheme, we
> > don't even care about the normal file handle contents. Instead, we
> > only check our extended fields, which include: server-side inode
> > address, ino, dev info, i_generation and server_generation. An NFS
> > client first uses the server-side inode address to locate the inode
> > object in the server inode cache (we dynamically remapped the inode
> > cache into the client, in order to expedite metadata retrieval and
> > bypass inter-VM communication). After getting the inode object, the
> > NFS client has to validate this inode object corresponds to the file
> > handle so that it can read the right file attributes stored in the
> > inode. There are many possibilities that can cause a located inode
> > stores false information: the inode has been released because someone
> > on the server remove the file, the inode was filled by another file's
> > inode (other possibilities?). So we must validate the inode before
> > using the file attributes retrieved from the mapped inode.
> >
> > That's why we bring up this question.
>
> Why do this, when people are working on standards and implementations
> for doing precisely the above within the NFSv4 protocol?
>
> > Also, does someone compare NFS v4's delegation mechanism with the
> > speculative execution mechanism proposed in SOSP 2005
> > http://www.cs.cmu.edu/~dga/15-849/papers/speculator-sosp2005.pdf?
> >
> > What are the pros and cons of these two mechanisms?
>
> Delegations are all about caching. This paper appears to be about
> getting round the bottlenecks due to synchronous operations. How are the
> two issues related?
>
> Cheers,
> Trond
>
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 19:59 ` Trond Myklebust
2006-08-10 22:25 ` Xin Zhao
@ 2006-08-10 22:28 ` Xin Zhao
2006-08-11 0:38 ` Trond Myklebust
2006-08-10 23:42 ` Bryan Henderson
2 siblings, 1 reply; 24+ messages in thread
From: Xin Zhao @ 2006-08-10 22:28 UTC (permalink / raw)
To: Trond Myklebust; +Cc: Matthew Wilcox, Neil Brown, linux-kernel, linux-fsdevel
Also, delegations are about caching. That's true. It improve NFS
performance because a client with a lease does not need to worry about
server change and can manipulate files using local cache. But if
speculative execution can achieve the same goal without incurring the
cost of lease renewal and revoke, delegation becomes less useful.
So my question is essentially: if speculative execution is there, why
do we still need delegation? Can delegation do anything better?
Xin
On 8/10/06, Trond Myklebust <trond.myklebust@fys.uio.no> wrote:
> On Thu, 2006-08-10 at 14:02 -0400, Xin Zhao wrote:
> > Thanks. Trond.
> >
> > The device is subject to change when server reboot? I don't quite
> > understand. If the backing device at the server side is not changed,
> > how come server reboot will cause device ID change?
>
> Things like USB, firewire, and fibre channel allocate their device ids
> on the fly. There is no such thing as a fixed device id in those cases.
>
> > About your comment on the second conclusion, I already explained in
> > one of my previous email. We assume that both server and clients are
> > under our control. That is, we don't consider too much about
> > interoperability. The file handle format will be static even the NFS
> > server is changed. Actually, in our inter-VM inode sharing scheme, we
> > don't even care about the normal file handle contents. Instead, we
> > only check our extended fields, which include: server-side inode
> > address, ino, dev info, i_generation and server_generation. An NFS
> > client first uses the server-side inode address to locate the inode
> > object in the server inode cache (we dynamically remapped the inode
> > cache into the client, in order to expedite metadata retrieval and
> > bypass inter-VM communication). After getting the inode object, the
> > NFS client has to validate this inode object corresponds to the file
> > handle so that it can read the right file attributes stored in the
> > inode. There are many possibilities that can cause a located inode
> > stores false information: the inode has been released because someone
> > on the server remove the file, the inode was filled by another file's
> > inode (other possibilities?). So we must validate the inode before
> > using the file attributes retrieved from the mapped inode.
> >
> > That's why we bring up this question.
>
> Why do this, when people are working on standards and implementations
> for doing precisely the above within the NFSv4 protocol?
>
> > Also, does someone compare NFS v4's delegation mechanism with the
> > speculative execution mechanism proposed in SOSP 2005
> > http://www.cs.cmu.edu/~dga/15-849/papers/speculator-sosp2005.pdf?
> >
> > What are the pros and cons of these two mechanisms?
>
> Delegations are all about caching. This paper appears to be about
> getting round the bottlenecks due to synchronous operations. How are the
> two issues related?
>
> Cheers,
> Trond
>
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 19:59 ` Trond Myklebust
2006-08-10 22:25 ` Xin Zhao
2006-08-10 22:28 ` Xin Zhao
@ 2006-08-10 23:42 ` Bryan Henderson
2 siblings, 0 replies; 24+ messages in thread
From: Bryan Henderson @ 2006-08-10 23:42 UTC (permalink / raw)
To: Trond Myklebust; +Cc: linux-fsdevel, Matthew Wilcox, Neil Brown, Xin Zhao
>Things like USB, firewire, and fibre channel allocate their device ids
>on the fly. There is no such thing as a fixed device id in those cases.
Also good old ATA and parallel SCSI. These are more stable than the ones
where you routinely plug stuff in and out, but still the device numbers
are chosen at each boot, typically according to order of discovery so that
if a different set of devices is operational at boot time, the device
numbers of the disk devices will be different. There's also the issue of
moving a device -- medium and all -- to a different place in the
configuration and moving a filesystem from one device to another.
--
Bryan Henderson IBM Almaden Research Center
San Jose CA Filesystems
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 18:15 ` Xin Zhao
@ 2006-08-11 0:07 ` Bryan Henderson
0 siblings, 0 replies; 24+ messages in thread
From: Bryan Henderson @ 2006-08-11 0:07 UTC (permalink / raw)
To: Xin Zhao; +Cc: linux-fsdevel, Matthew Wilcox, Neil Brown
>But your points seem to be valid as long as you can give more details
>on "some file systems". ;-)
I don't think I can do that. I couldn't even list ALL the filesystem
types, much less tell which ones are implemented which way -- in which
versions of Linux. I'd embarass myself if I tried. I can barely remember
the generalities; I don't find the actual filesystem type inventory to be
very interesting myself.
If you're willing to build something that doesn't work with Linux
filesystems in general, but just works with the "important" ones, then it
makes more sense to go the other way -- identify the ones you care about
and ask if they fit the assumptions you require. I believe ext3
everywhere it exists today meets your expectations for inodes and device
numbers -- if you add some conditions so that the device number -
filesystem association is permanent.
Again being general, but a little less, I can say that the inode
assumption clearly doesn't work on a system that has more than 4G files. I
would suspect the various supercomputing cluster filesystems, and I heard
a long time ago AFS broke the 32 bit inode number barrier. Filesystems
imported from non-Unix places often have trouble synthesizing a Unix inode
number.
Finding a filesystem without a useful normal device number to identify it
is a lot easier. Any filesystem that doesn't live by design on a single
disk device: network filesystem, distributed filesystem, multi-volume
filesystem, non-storage filesystem (like proc), or unconventional storage
filesystem such as ramfs or tmpfs.
--
Bryan Henderson IBM Almaden Research Center
San Jose CA Filesystems
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 22:28 ` Xin Zhao
@ 2006-08-11 0:38 ` Trond Myklebust
0 siblings, 0 replies; 24+ messages in thread
From: Trond Myklebust @ 2006-08-11 0:38 UTC (permalink / raw)
To: Xin Zhao; +Cc: Matthew Wilcox, Neil Brown, linux-kernel, linux-fsdevel
On Thu, 2006-08-10 at 18:28 -0400, Xin Zhao wrote:
> Also, delegations are about caching. That's true. It improve NFS
> performance because a client with a lease does not need to worry about
> server change and can manipulate files using local cache. But if
> speculative execution can achieve the same goal without incurring the
> cost of lease renewal and revoke, delegation becomes less useful.
What am I missing? AFAICS the main purpose of speculative execution
would appear to be to reduce the latency of syscall execution on
clients. That doesn't suffice to replace caching even by a long shot.
Delegations are all about _not_ sending commands to the server when you
don't need to. They make NFS scale to larger numbers of clients.
> So my question is essentially: if speculative execution is there, why
> do we still need delegation? Can delegation do anything better?
Speculative execution is where? I see one academic paper detailing a
couple of lab experiments, but no published code. Do you know of anyone
who has reproduced these results in real life environments?
I'm particularly curious to see how they resolved the requirement that
"...speculative state should never be visible to the user or any
external device.". The fact that they need to discuss having to roll
back operations like "mkdir", which create (very) user-visible state on
the server, is rather telling...
Trond
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Urgent help needed on an NFS question, please help!!!
2006-08-10 22:25 ` Xin Zhao
@ 2006-08-11 0:44 ` Trond Myklebust
0 siblings, 0 replies; 24+ messages in thread
From: Trond Myklebust @ 2006-08-11 0:44 UTC (permalink / raw)
To: Xin Zhao; +Cc: Matthew Wilcox, Neil Brown, linux-kernel, linux-fsdevel
On Thu, 2006-08-10 at 18:25 -0400, Xin Zhao wrote:
> The inter-VM inode helps reduce communication cost used to retrieve
> file attributes in a VM environment. In a network environment, it is
> possible for a client to direct see the inode caches of the server.
> But in the virtual server environment, where both client and server
> running on the same physical host, this would be possible.
>
> If clients have read-only access to server's inode cache, they can
> directly retrieve file attributes without incurring expensive
> getattr() rpc call. Of couse the delegation is able to allow a client
> to trust local cached file attributes without worry about server
> change. But this only works when file is not shared by multiple
> clients. Right? Does NFS4 has some other mechanisms that can further
> improve performance on metadata access?
Not metadata access, no. That would require some seriously messy locking
rules.
It improves performance by allowing a client to access the block device
directly for data reads and writes if it has the capability of doing so.
Trond
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2006-08-11 0:45 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-10 5:04 Urgent help needed on an NFS question, please help!!! Xin Zhao
2006-08-10 5:11 ` Neil Brown
2006-08-10 5:54 ` Xin Zhao
2006-08-10 6:03 ` Neil Brown
2006-08-10 15:15 ` Xin Zhao
2006-08-10 16:11 ` Matthew Wilcox
2006-08-10 16:23 ` Xin Zhao
2006-08-10 16:54 ` Matthew Wilcox
2006-08-10 17:08 ` Xin Zhao
2006-08-10 17:38 ` Trond Myklebust
2006-08-10 17:28 ` Trond Myklebust
2006-08-10 18:02 ` Xin Zhao
2006-08-10 19:59 ` Trond Myklebust
2006-08-10 22:25 ` Xin Zhao
2006-08-11 0:44 ` Trond Myklebust
2006-08-10 22:28 ` Xin Zhao
2006-08-11 0:38 ` Trond Myklebust
2006-08-10 23:42 ` Bryan Henderson
2006-08-10 17:50 ` Bryan Henderson
2006-08-10 18:15 ` Xin Zhao
2006-08-11 0:07 ` Bryan Henderson
2006-08-10 21:00 ` Peter Staubach
2006-08-10 6:04 ` Xin Zhao
2006-08-10 6:15 ` Xin Zhao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).