[PATCH] afs: correctly use 64-bit time for UUID

Jeffrey Altman jaltman at auristor.com
Wed Jan 11 08:58:45 PST 2017


Arnd and David,

AFS3 does not require a time-based UUID.  Time based UUIDs are simply
one of the defined UUID formats and the one that was used by the
original developers.  The UUID namespace is partitioned so there will
not be collisions between time based UUIDs and random DCE version 4 UUIDs.

If the Linux kernel had an equivalent of uuid_generate() from userland
it could be used by kAFS.

Jeffrey Altman



On 1/11/2017 10:55 AM, Arnd Bergmann wrote:
> On Wednesday, January 11, 2017 2:47:20 PM CET David Howells wrote:
>> Arnd Bergmann <arnd at arndb.de> wrote:
>>
>>>> Is it worth abstracting out in-kernel UUID generation?
>>>
>>> Do you mean moving it out of AFS into lib/*.c? I think the 'afs_uuid'
>>> structure is quite different from other UUID definitions, so that wouldn't
>>> work.
>>
>> afs_uuid is as it is to make it easier to package into the on-wire format, but
>> I suspect there's no problem with using a completely random UUID instead and
>> divvying it up the same way.
> 
> Maybe like this:
> 
> 8<----7
> From 9e164f852366750fdd732ae317af9f4a9a04a16e Mon Sep 17 00:00:00 2001
> From: Arnd Bergmann <arnd at arndb.de>
> Date: Wed, 11 Jan 2017 16:53:13 +0100
> Subject: [PATCH] afs: use random UUID
> 
> AFS uses a time based UUID to identify the host itself. This requires
> getting a timestamp which is currently done through the getnstimeofday()
> interface that we want to eventually get rid of.
> 
> Instead of replacing it with a ktime based interface, this simply
> removes the entire function and uses generate_random_uuid() instead,
> which has a v4 ("completely random") uuid instead of the time based one.
> 
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>
> 
> diff --git a/fs/afs/main.c b/fs/afs/main.c
> index f8188feb03ad..9944770849da 100644
> --- a/fs/afs/main.c
> +++ b/fs/afs/main.c
> @@ -35,49 +35,6 @@ struct afs_uuid afs_uuid;
>  struct workqueue_struct *afs_wq;
>  
>  /*
> - * get a client UUID
> - */
> -static int __init afs_get_client_UUID(void)
> -{
> -	struct timespec ts;
> -	u64 uuidtime;
> -	u16 clockseq;
> -	int ret;
> -
> -	/* read the MAC address of one of the external interfaces and construct
> -	 * a UUID from it */
> -	ret = afs_get_MAC_address(afs_uuid.node, sizeof(afs_uuid.node));
> -	if (ret < 0)
> -		return ret;
> -
> -	getnstimeofday(&ts);
> -	uuidtime = (u64) ts.tv_sec * 1000 * 1000 * 10;
> -	uuidtime += ts.tv_nsec / 100;
> -	uuidtime += AFS_UUID_TO_UNIX_TIME;
> -	afs_uuid.time_low = uuidtime;
> -	afs_uuid.time_mid = uuidtime >> 32;
> -	afs_uuid.time_hi_and_version = (uuidtime >> 48) & AFS_UUID_TIMEHI_MASK;
> -	afs_uuid.time_hi_and_version |= AFS_UUID_VERSION_TIME;
> -
> -	get_random_bytes(&clockseq, 2);
> -	afs_uuid.clock_seq_low = clockseq;
> -	afs_uuid.clock_seq_hi_and_reserved =
> -		(clockseq >> 8) & AFS_UUID_CLOCKHI_MASK;
> -	afs_uuid.clock_seq_hi_and_reserved |= AFS_UUID_VARIANT_STD;
> -
> -	_debug("AFS UUID: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
> -	       afs_uuid.time_low,
> -	       afs_uuid.time_mid,
> -	       afs_uuid.time_hi_and_version,
> -	       afs_uuid.clock_seq_hi_and_reserved,
> -	       afs_uuid.clock_seq_low,
> -	       afs_uuid.node[0], afs_uuid.node[1], afs_uuid.node[2],
> -	       afs_uuid.node[3], afs_uuid.node[4], afs_uuid.node[5]);
> -
> -	return 0;
> -}
> -
> -/*
>   * initialise the AFS client FS module
>   */
>  static int __init afs_init(void)
> @@ -86,9 +43,7 @@ static int __init afs_init(void)
>  
>  	printk(KERN_INFO "kAFS: Red Hat AFS client v0.1 registering.\n");
>  
> -	ret = afs_get_client_UUID();
> -	if (ret < 0)
> -		return ret;
> +	generate_random_uuid((unsigned char *)&afs_uuid);
>  
>  	/* create workqueue */
>  	ret = -ENOMEM;
> 
> 
> _______________________________________________
> linux-afs mailing list
> http://lists.infradead.org/mailman/listinfo/linux-afs
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: jaltman.vcf
Type: text/x-vcard
Size: 395 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-afs/attachments/20170111/4568a5a9/attachment-0001.vcf>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4057 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.infradead.org/pipermail/linux-afs/attachments/20170111/4568a5a9/attachment-0001.p7s>


More information about the linux-afs mailing list