Эх сурвалжийг харах

afs: Use core kernel UUID generation

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>
Arnd Bergmann 8 жил өмнө
parent
commit
b4db2b35fc

+ 5 - 6
fs/afs/internal.h

@@ -560,6 +560,11 @@ extern struct vfsmount *afs_d_automount(struct path *);
 extern int afs_mntpt_check_symlink(struct afs_vnode *, struct key *);
 extern int afs_mntpt_check_symlink(struct afs_vnode *, struct key *);
 extern void afs_mntpt_kill_timer(void);
 extern void afs_mntpt_kill_timer(void);
 
 
+/*
+ * netdevices.c
+ */
+extern int afs_get_ipv4_interfaces(struct afs_interface *, size_t, bool);
+
 /*
 /*
  * proc.c
  * proc.c
  */
  */
@@ -623,12 +628,6 @@ extern void __exit afs_purge_servers(void);
 extern int afs_fs_init(void);
 extern int afs_fs_init(void);
 extern void afs_fs_exit(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
  * vlclient.c
  */
  */

+ 1 - 47
fs/afs/main.c

@@ -34,50 +34,6 @@ MODULE_PARM_DESC(rootcell, "root AFS cell name and VL server IP addr list");
 struct uuid_v1 afs_uuid;
 struct uuid_v1 afs_uuid;
 struct workqueue_struct *afs_wq;
 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
  * 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");
 	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 */
 	/* create workqueue */
 	ret = -ENOMEM;
 	ret = -ENOMEM;

+ 0 - 21
fs/afs/netdevices.c

@@ -11,27 +11,6 @@
 #include <net/net_namespace.h>
 #include <net/net_namespace.h>
 #include "internal.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
  * get a list of this system's interface IPv4 addresses, netmasks and MTUs
  * - maxbufs must be at least 1
  * - maxbufs must be at least 1