unsigned flags)
 {
        struct kernfs_node *kn;
+       u32 gen;
+       int cursor;
        int ret;
 
        name = kstrdup_const(name, GFP_KERNEL);
 
        idr_preload(GFP_KERNEL);
        spin_lock(&kernfs_idr_lock);
-       ret = idr_alloc(&root->ino_idr, kn, 1, 0, GFP_ATOMIC);
+       cursor = idr_get_cursor(&root->ino_idr);
+       ret = idr_alloc_cyclic(&root->ino_idr, kn, 1, 0, GFP_ATOMIC);
+       if (ret >= 0 && ret < cursor)
+               root->next_generation++;
+       gen = root->next_generation;
        spin_unlock(&kernfs_idr_lock);
        idr_preload_end();
        if (ret < 0)
                goto err_out2;
        kn->ino = ret;
+       kn->generation = gen;
 
        atomic_set(&kn->count, 1);
        atomic_set(&kn->active, KN_DEACTIVATED_BIAS);
 
        idr_init(&root->ino_idr);
        INIT_LIST_HEAD(&root->supers);
+       root->next_generation = 1;
 
        kn = __kernfs_new_node(root, "", S_IFDIR | S_IRUGO | S_IXUGO,
                               KERNFS_DIR);
 
        inode->i_private = kn;
        inode->i_mapping->a_ops = &kernfs_aops;
        inode->i_op = &kernfs_iops;
+       inode->i_generation = kn->generation;
 
        set_default_inode_attr(inode, kn->mode);
        kernfs_refresh_inode(kn, inode);
 
        umode_t                 mode;
        unsigned int            ino;
        struct kernfs_iattrs    *iattr;
+       u32                     generation;
 };
 
 /*
 
        /* private fields, do not use outside kernfs proper */
        struct idr              ino_idr;
+       u32                     next_generation;
        struct kernfs_syscall_ops *syscall_ops;
 
        /* list of kernfs_super_info of this root, protected by kernfs_mutex */