]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
afs: Use core kernel UUID generation
authorArnd Bergmann <arnd@arndb.de>
Fri, 10 Feb 2017 16:34:07 +0000 (16:34 +0000)
committerDavid Howells <dhowells@redhat.com>
Fri, 10 Feb 2017 16:34:17 +0000 (16:34 +0000)
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, simply remove the
entire function and use generate_random_uuid() instead, which has a v4
("completely random") UUID instead of the time-based one.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David Howells <dhowells@redhat.com>
fs/afs/internal.h
fs/afs/main.c
fs/afs/netdevices.c

index 79061fa171681c1a63a115ffdeaa92d14aa3320e..8acf3670e75649d0c62de3dd068d56da37d5b97a 100644 (file)
@@ -560,6 +560,11 @@ extern struct vfsmount *afs_d_automount(struct path *);
 extern int afs_mntpt_check_symlink(struct afs_vnode *, struct key *);
 extern void afs_mntpt_kill_timer(void);
 
+/*
+ * netdevices.c
+ */
+extern int afs_get_ipv4_interfaces(struct afs_interface *, size_t, bool);
+
 /*
  * proc.c
  */
@@ -623,12 +628,6 @@ extern void __exit afs_purge_servers(void);
 extern int afs_fs_init(void);
 extern void afs_fs_exit(void);
 
-/*
- * use-rtnetlink.c
- */
-extern int afs_get_ipv4_interfaces(struct afs_interface *, size_t, bool);
-extern int afs_get_MAC_address(u8 *, size_t);
-
 /*
  * vlclient.c
  */
index a07c14df3fd13a3f1a28e3e2af519dc65579e9db..51d7d17bca5756b9e4dbbb05408689e2d936a477 100644 (file)
@@ -34,50 +34,6 @@ MODULE_PARM_DESC(rootcell, "root AFS cell name and VL server IP addr list");
 struct uuid_v1 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, hi_v;
-       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 += UUID_TO_UNIX_TIME;
-       afs_uuid.time_low = htonl(uuidtime);
-       afs_uuid.time_mid = htons(uuidtime >> 32);
-       hi_v = (uuidtime >> 48) & UUID_TIMEHI_MASK;
-       hi_v |= UUID_VERSION_TIME;
-       afs_uuid.time_hi_and_version = htons(hi_v);
-
-       get_random_bytes(&clockseq, 2);
-       afs_uuid.clock_seq_low = clockseq;
-       afs_uuid.clock_seq_hi_and_reserved =
-               (clockseq >> 8) & UUID_CLOCKHI_MASK;
-       afs_uuid.clock_seq_hi_and_reserved |= UUID_VARIANT_STD;
-
-       _debug("AFS UUID: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
-              ntohl(afs_uuid.time_low),
-              ntohs(afs_uuid.time_mid),
-              ntohs(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
  */
@@ -87,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;
index 7ad36506c256a55d54fc96dc6e3c323e82c4c230..40b2bab3e401445492f91e11661617bda1328f37 100644 (file)
 #include <net/net_namespace.h>
 #include "internal.h"
 
-/*
- * get a MAC address from a random ethernet interface that has a real one
- * - the buffer will normally be 6 bytes in size
- */
-int afs_get_MAC_address(u8 *mac, size_t maclen)
-{
-       struct net_device *dev;
-       int ret = -ENODEV;
-
-       BUG_ON(maclen != ETH_ALEN);
-
-       rtnl_lock();
-       dev = __dev_getfirstbyhwtype(&init_net, ARPHRD_ETHER);
-       if (dev) {
-               memcpy(mac, dev->dev_addr, maclen);
-               ret = 0;
-       }
-       rtnl_unlock();
-       return ret;
-}
-
 /*
  * get a list of this system's interface IPv4 addresses, netmasks and MTUs
  * - maxbufs must be at least 1