int s_first_ino;
        unsigned int s_inode_readahead_blks;
        unsigned int s_inode_goal;
-       spinlock_t s_next_gen_lock;
-       u32 s_next_generation;
        u32 s_hash_seed[4];
        int s_def_hash_version;
        int s_hash_unsigned;    /* 3 if hash should be signed, 0 if not */
 
                           inode->i_ino);
                goto out;
        }
-       spin_lock(&sbi->s_next_gen_lock);
-       inode->i_generation = sbi->s_next_generation++;
-       spin_unlock(&sbi->s_next_gen_lock);
+       inode->i_generation = prandom_u32();
 
        /* Precompute checksum seed for inode metadata */
        if (ext4_has_metadata_csum(sb)) {
 
 #include <linux/mount.h>
 #include <linux/file.h>
 #include <linux/quotaops.h>
+#include <linux/random.h>
 #include <linux/uuid.h>
 #include <linux/uaccess.h>
 #include <linux/delay.h>
        int err;
        struct inode *inode_bl;
        struct ext4_inode_info *ei_bl;
-       struct ext4_sb_info *sbi = EXT4_SB(sb);
 
        if (inode->i_nlink != 1 || !S_ISREG(inode->i_mode))
                return -EINVAL;
 
        inode->i_ctime = inode_bl->i_ctime = current_time(inode);
 
-       spin_lock(&sbi->s_next_gen_lock);
-       inode->i_generation = sbi->s_next_generation++;
-       inode_bl->i_generation = sbi->s_next_generation++;
-       spin_unlock(&sbi->s_next_gen_lock);
+       inode->i_generation = prandom_u32();
+       inode_bl->i_generation = prandom_u32();
 
        ext4_discard_preallocations(inode);
 
 
        }
 
        sbi->s_gdb_count = db_count;
-       get_random_bytes(&sbi->s_next_generation, sizeof(u32));
-       spin_lock_init(&sbi->s_next_gen_lock);
 
        timer_setup(&sbi->s_err_report, print_daily_error_info, 0);