Whamcloud - gitweb
Move random uuid functions to prng.c
authordeen <deen>
Wed, 11 Apr 2007 18:33:27 +0000 (18:33 +0000)
committerdeen <deen>
Wed, 11 Apr 2007 18:33:27 +0000 (18:33 +0000)
b=10802
i=adilger
i=green

16 files changed:
lustre/ChangeLog
lustre/include/lustre_lib.h
lustre/include/obd_class.h
lustre/liblustre/llite_lib.c
lustre/liblustre/llite_lib.h
lustre/liblustre/lutil.c
lustre/liblustre/super.c
lustre/liblustre/tests/echo_test.c
lustre/llite/llite_lib.c
lustre/llite/super25.c
lustre/mds/handler.c
lustre/obdclass/class_obd.c
lustre/obdclass/lustre_handles.c
lustre/obdclass/obd_mount.c
lustre/obdclass/prng.c
lustre/obdclass/uuid.c

index bbbba9d..3a13399 100644 (file)
@@ -31,6 +31,10 @@ Severity   : enhancement
 Bugzilla   : 10651
 Description: Nanosecond timestamp support.
 
+Severity   : enhancement 
+Bugzilla   : 10802
+Description: Move random uuid functions to prng.c.
+
 --------------------------------------------------------------------------------
 
 tbd         Cluster File Systems, Inc. <info@clusterfs.com>
index 451d16c..6489465 100644 (file)
@@ -42,6 +42,8 @@
 /* prng.c */
 unsigned int ll_rand(void);        /* returns a random 32-bit integer */
 void ll_srand(unsigned int, unsigned int);     /* seed the generator */
+void ll_get_random_bytes(void *buf, int size);
+void ll_generate_random_uuid(unsigned char uuid_out[16]);
 
 /* target.c */
 struct ptlrpc_request;
index dcd0876..6275fb4 100644 (file)
@@ -1404,7 +1404,6 @@ extern void obd_sysctl_clean (void);
 
 /* uuid.c  */
 typedef __u8 class_uuid_t[16];
-void class_generate_random_uuid(class_uuid_t uuid);
 void class_uuid_unparse(class_uuid_t in, struct obd_uuid *out);
 
 /* lustre_peer.c    */
index 6f0c570..d179c10 100644 (file)
@@ -84,7 +84,7 @@ int liblustre_process_log(struct config_llog_instance *cfg,
         struct obd_connect_data *ocd = NULL;
         ENTRY;
 
-        generate_random_uuid(uuid);
+        ll_generate_random_uuid(uuid);
         class_uuid_unparse(uuid, &mgc_uuid);
 
         nid = libcfs_str2nid(mgsnid);
index 7e4084a..3df6cad 100644 (file)
@@ -173,7 +173,6 @@ struct mount_option_s
         ((unsigned long)(ptr) == 0 || (unsigned long)(ptr) > -1000UL)
 
 /* llite_lib.c */
-void generate_random_uuid(unsigned char uuid_out[16]);
 int liblustre_process_log(struct config_llog_instance *cfg, char *mgsnid,
                           char *profile, int allow_recov);
 int ll_parse_mount_target(const char *target, char **mgsnid,
index db203f3..250c70e 100644 (file)
@@ -129,32 +129,6 @@ void liblustre_init_random()
         ll_srand(tv.tv_sec ^ __swab32(seed[0]), tv.tv_usec ^__swab32(getpid()));
 }
 
-void get_random_bytes(void *buf, int size)
-{
-        int *p = buf;
-        int rem;
-        LASSERT(size >= 0);
-
-        rem = min((unsigned long)buf & (sizeof(int) - 1), size);
-        if (rem) {
-                int val = ll_rand();
-                memcpy(buf, &val, rem);
-                p = buf + rem;
-                size -= rem;
-        }
-
-        while (size >= sizeof(int)) {
-                *p = ll_rand();
-                size -= sizeof(int);
-                p++;
-        }
-        buf = p;
-        if (size) {
-                int val = ll_rand();
-                memcpy(buf, &val, size);
-        }
-}
 static void init_capability(int *res)
 {
 #ifdef HAVE_LIBCAP
@@ -238,11 +212,6 @@ int liblustre_init_current(char *comm)
         return 0;
 }
 
-void generate_random_uuid(unsigned char uuid_out[16])
-{
-        get_random_bytes(uuid_out, sizeof(uuid_out));
-}
-
 int init_lib_portals()
 {
         int rc;
index cb50b8d..8105df7 100644 (file)
@@ -1884,7 +1884,7 @@ llu_fsswop_mount(const char *source,
                 RETURN(-ENOMEM);
 
         INIT_LIST_HEAD(&sbi->ll_conn_chain);
-        generate_random_uuid(uuid);
+        ll_generate_random_uuid(uuid);
         class_uuid_unparse(uuid, &sbi->ll_sb_uuid);
 
         /* generate a string unique to this super, let's try
index dcb31a0..62a11de 100644 (file)
@@ -96,9 +96,9 @@ static int connect_echo_client(void)
        int err;
        ENTRY;
 
-        generate_random_uuid(osc_uuid);
+        ll_generate_random_uuid(osc_uuid);
         class_uuid_unparse(osc_uuid, &osc_uuid_str);
-        generate_random_uuid(echo_uuid);
+        ll_generate_random_uuid(echo_uuid);
         class_uuid_unparse(echo_uuid, &echo_uuid_str);
 
         nid = libcfs_str2nid(echo_server_nid);
index a477866..b1fb5fc 100644 (file)
@@ -75,7 +75,7 @@ static struct ll_sb_info *ll_init_sbi(void)
         INIT_LIST_HEAD(&sbi->ll_conn_chain);
         INIT_LIST_HEAD(&sbi->ll_orphan_dentry_list);
 
-        class_generate_random_uuid(uuid);
+        ll_generate_random_uuid(uuid);
         class_uuid_unparse(uuid, &sbi->ll_sb_uuid);
         CDEBUG(D_HA, "generated uuid: %s\n", sbi->ll_sb_uuid.uuid);
 
@@ -702,7 +702,7 @@ static int old_lustre_process_log(struct super_block *sb, char *newprofile,
         int i, rc = 0, recov_bk = 1, failnodes = 0;
         ENTRY;
 
-        class_generate_random_uuid(uuid);
+        ll_generate_random_uuid(uuid);
         class_uuid_unparse(uuid, &mdc_uuid);
         CDEBUG(D_HA, "generated uuid: %s\n", mdc_uuid.uuid);
         
index 9fb337e..e56d773 100644 (file)
@@ -131,7 +131,7 @@ static int __init init_lustre_lite(void)
         lustre_register_client_fill_super(ll_fill_super);
         lustre_register_client_process_config(ll_process_config);
 
-        get_random_bytes(seed, sizeof(seed));
+        ll_get_random_bytes(seed, sizeof(seed));
 
         /* Nodes with small feet have little entropy
          * the NID for this node gives the most entropy in the low bits */
index 04d0802..bf9646b 100644 (file)
@@ -1946,7 +1946,7 @@ static int mds_setup(struct obd_device *obd, obd_count len, void *buf)
         if (lcfg->lcfg_bufcount >= 4 && LUSTRE_CFG_BUFLEN(lcfg, 3) > 0) {
                 class_uuid_t uuid;
 
-                generate_random_uuid(uuid);
+                ll_generate_random_uuid(uuid);
                 class_uuid_unparse(uuid, &mds->mds_lov_uuid);
 
                 OBD_ALLOC(mds->mds_profile, LUSTRE_CFG_BUFLEN(lcfg, 3));
index ccf80f3..1684e72 100644 (file)
@@ -412,7 +412,6 @@ EXPORT_SYMBOL(class_disconnect);
 EXPORT_SYMBOL(class_num2obd);
 
 /* uuid.c */
-EXPORT_SYMBOL(class_generate_random_uuid);
 EXPORT_SYMBOL(class_uuid_unparse);
 EXPORT_SYMBOL(lustre_uuid_to_peer);
 
index 21d6f50..9d4d1ec 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <obd_support.h>
 #include <lustre_handles.h>
+#include <lustre_lib.h>
 
 spinlock_t handle_lock;
 static __u64 handle_base;
@@ -145,7 +146,7 @@ int class_handle_init(void)
              bucket--)
                 CFS_INIT_LIST_HEAD(bucket);
 
-        get_random_bytes(&handle_base, sizeof(handle_base));
+        ll_get_random_bytes(&handle_base, sizeof(handle_base));
         LASSERT(handle_base != 0ULL);
 
         return 0;
index 30782b7..0dd655e 100644 (file)
@@ -640,7 +640,7 @@ static int lustre_start_mgc(struct super_block *sb)
 
         /* Random uuid for MGC allows easier reconnects */
         OBD_ALLOC_PTR(uuid);
-        class_generate_random_uuid(uuidc);
+        ll_generate_random_uuid(uuidc);
         class_uuid_unparse(uuidc, uuid);
 
         /* Start the MGC */
index b3c2a75..bd41908 100644 (file)
 
 #ifndef __KERNEL__
 #include <liblustre.h>
+#define get_random_bytes(val, size)     (*val) = 0
 #endif
 #include <obd_class.h>
+#include <linux/random.h>
 
 /*
 From: George Marsaglia <geo@stat.fsu.edu>
@@ -66,3 +68,40 @@ void ll_srand(unsigned int seed1, unsigned int seed2)
                seed_y = seed2;
 }
 EXPORT_SYMBOL(ll_srand);
+
+void ll_get_random_bytes(void *buf, int size)
+{
+        int *p = buf;
+        int rem, tmp;
+
+        LASSERT(size >= 0);
+
+        rem = min((int)((unsigned long)buf & (sizeof(int) - 1)), size);
+        if (rem) {
+                get_random_bytes(&tmp, sizeof(tmp));
+                tmp ^= ll_rand();
+                memcpy(buf, &tmp, rem);
+                p = buf + rem;
+                size -= rem;
+        }
+
+        while (size >= sizeof(int)) {
+                get_random_bytes(&tmp, sizeof(tmp));
+                *p = ll_rand() ^ tmp;
+                size -= sizeof(int);
+                p++;
+        }
+        buf = p;
+        if (size) {
+                get_random_bytes(&tmp, sizeof(tmp));
+                tmp ^= ll_rand();
+                memcpy(buf, &tmp, size);
+        }
+}
+EXPORT_SYMBOL(ll_get_random_bytes); 
+
+void ll_generate_random_uuid(unsigned char uuid_out[16])
+{
+        ll_get_random_bytes(uuid_out, sizeof(uuid_out));
+}
+EXPORT_SYMBOL(ll_generate_random_uuid);
index 09302bd..ad072ff 100644 (file)
@@ -125,28 +125,6 @@ int class_uuid_parse(struct obd_uuid in, class_uuid_t uu)
 
 void generate_random_uuid(unsigned char uuid_out[16]);
 
-/* We need to have some extra twiddling here because some systems have
- * no random state when they start up. */
-void class_generate_random_uuid(class_uuid_t uuid)
-{
-        struct timeval t;
-        int *i, j, k;
-
-        LASSERT(sizeof(class_uuid_t) % sizeof(*i) == 0);
-
-        j = jiffies;
-        do_gettimeofday(&t);
-        k = t.tv_usec;
-
-        generate_random_uuid(uuid);
-
-        for (i = (int *)uuid; (char *)i < (char *)uuid + sizeof(class_uuid_t); i++) {
-                *i ^= j ^ k;
-                j = ((j << 8) & 0xffffff00) | ((j >> 24) & 0x000000ff);
-                k = ((k >> 8) & 0x00ffffff) | ((k << 24) & 0xff000000);
-        }
-}
-
 void class_uuid_unparse(class_uuid_t uu, struct obd_uuid *out)
 {
         struct uuid uuid;