From: Pekka Enberg <[email protected]>
Update ext3_statfs to return an FSID that is a 64 bit XOR of the 128 bit
filesystem UUID as suggested by Andreas Dilger. See the following Bugzilla
entry for details:
http://bugzilla.kernel.org/show_bug.cgi?id=136
Cc: Andreas Dilger <[email protected]>
Cc: Stephen Tweedie <[email protected]>
Signed-off-by: Pekka Enberg <[email protected]>
---
fs/ext3/super.c | 5 +++++
1 file changed, 5 insertions(+)
Index: 2.6/fs/ext3/super.c
===================================================================
--- 2.6.orig/fs/ext3/super.c
+++ 2.6/fs/ext3/super.c
@@ -2385,6 +2385,7 @@ static int ext3_statfs (struct dentry *
struct ext3_super_block *es = sbi->s_es;
ext3_fsblk_t overhead;
int i;
+ u64 fsid;
if (test_opt (sb, MINIX_DF))
overhead = 0;
@@ -2431,6 +2432,10 @@ static int ext3_statfs (struct dentry *
buf->f_files = le32_to_cpu(es->s_inodes_count);
buf->f_ffree = percpu_counter_sum(&sbi->s_freeinodes_counter);
buf->f_namelen = EXT3_NAME_LEN;
+ fsid = le64_to_cpup((void *)es->s_uuid) ^
+ le64_to_cpup((void *)es->s_uuid + sizeof(u64));
+ buf->f_fsid.val[0] = fsid & 0xFFFFFFFFUL;
+ buf->f_fsid.val[1] = (fsid >> 32) & 0xFFFFFFFFUL;
return 0;
}
On Tue, 10 Oct 2006 11:32:13 +0300 (EEST)
Pekka J Enberg <[email protected]> wrote:
> From: Pekka Enberg <[email protected]>
>
> Update ext3_statfs to return an FSID that is a 64 bit XOR of the 128 bit
> filesystem UUID as suggested by Andreas Dilger. See the following Bugzilla
> entry for details:
>
> http://bugzilla.kernel.org/show_bug.cgi?id=136
>
> Cc: Andreas Dilger <[email protected]>
> Cc: Stephen Tweedie <[email protected]>
> Signed-off-by: Pekka Enberg <[email protected]>
Deja vu. Gosh, has it really been four years?
Combatants cc'ed ;)
>
> fs/ext3/super.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> Index: 2.6/fs/ext3/super.c
> ===================================================================
> --- 2.6.orig/fs/ext3/super.c
> +++ 2.6/fs/ext3/super.c
> @@ -2385,6 +2385,7 @@ static int ext3_statfs (struct dentry *
> struct ext3_super_block *es = sbi->s_es;
> ext3_fsblk_t overhead;
> int i;
> + u64 fsid;
>
> if (test_opt (sb, MINIX_DF))
> overhead = 0;
> @@ -2431,6 +2432,10 @@ static int ext3_statfs (struct dentry *
> buf->f_files = le32_to_cpu(es->s_inodes_count);
> buf->f_ffree = percpu_counter_sum(&sbi->s_freeinodes_counter);
> buf->f_namelen = EXT3_NAME_LEN;
> + fsid = le64_to_cpup((void *)es->s_uuid) ^
> + le64_to_cpup((void *)es->s_uuid + sizeof(u64));
> + buf->f_fsid.val[0] = fsid & 0xFFFFFFFFUL;
> + buf->f_fsid.val[1] = (fsid >> 32) & 0xFFFFFFFFUL;
> return 0;
> }
>
ext2 and ext4 would need patching too...
On 10/10/06, Andrew Morton <[email protected]> wrote:
> ext2 and ext4 would need patching too...
I see you already beat me to it. Thanks Andrew!
Pekka
Hi,
On Tue, 2006-10-10 at 13:36 -0700, Andrew Morton wrote:
> > Update ext3_statfs to return an FSID that is a 64 bit XOR of the 128 bit
> > filesystem UUID as suggested by Andreas Dilger. See the following Bugzilla
> > entry for details:
> >
> > http://bugzilla.kernel.org/show_bug.cgi?id=136
> >
> > Cc: Andreas Dilger <[email protected]>
> > Cc: Stephen Tweedie <[email protected]>
> > Signed-off-by: Pekka Enberg <[email protected]>
>
> Deja vu. Gosh, has it really been four years?
>
> Combatants cc'ed ;)
Looks entirely reasonable to me.
--Stephen
On Tue, Oct 10, 2006 at 01:36:36PM -0700, Andrew Morton wrote:
> On Tue, 10 Oct 2006 11:32:13 +0300 (EEST)
> Pekka J Enberg <[email protected]> wrote:
>
> > From: Pekka Enberg <[email protected]>
> >
> > Update ext3_statfs to return an FSID that is a 64 bit XOR of the 128 bit
> > filesystem UUID as suggested by Andreas Dilger.
>
> Deja vu. Gosh, has it really been four years?
>
> Combatants cc'ed ;)
Ha, you have a memory. To me this seems infinitely long ago.
Google turned up some interesting discussions on dev_t, and the below exchange.
No, at first sight I have no objections to the suggested patch.
(Although I think that fsid is used only for doubtful purposes.)
Andries
-----
Andries Brouwer wrote:
> On Mon, Dec 09, 2002 at 02:15:12PM -0800, H. Peter Anvin wrote:
>
> > > The general idea is that f_fsid contains some random stuff such that
> > > the pair (f_fsid,ino) uniquely determines a file.
>
> > This, of course, is the exact POSIX definition of the st_dev part of
> > struct stat: (st_dev, st_ino) uniquely identifies the file.
>
> Yes, but the difference is that (st_dev, st_ino) only identifies
> the file within a single machine, and may stop working when you
> have NFS mounts.