Browse Source

Remove support for user provided class as it is way too problematic to recover existing classes.

Godzil 6 years ago
parent
commit
684a150a21
1 changed files with 2 additions and 205 deletions
  1. 2 205
      kfusd/kfusd.c

+ 2 - 205
kfusd/kfusd.c

@@ -93,6 +93,7 @@
 #ifndef GIT_DESCRIBE
 #define GIT_DESCRIBE "unknownversion-dirty"
 #endif
+
 /* Define this if you want to emit debug messages (adds ~8K) */
 //#define CONFIG_FUSD_DEBUG
 
@@ -156,88 +157,6 @@
 #define FULL_NAME_HASH(a, b) full_name_hash(a, b)
 #endif
 
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)
-
-struct sysfs_elem_dir
-{
-   struct kobject *kobj;
-   /* children list starts here and goes through sd->s_sibling */
-   struct sysfs_dirent *children;
-};
-
-struct sysfs_elem_symlink
-{
-   struct sysfs_dirent *target_sd;
-};
-
-struct sysfs_elem_attr
-{
-   struct attribute *attr;
-   struct sysfs_open_dirent *open;
-};
-
-struct sysfs_elem_bin_attr
-{
-   struct bin_attribute *bin_attr;
-   struct hlist_head buffers;
-};
-
-struct sysfs_dirent
-{
-   atomic_t s_count;
-   atomic_t s_active;
-   struct sysfs_dirent *s_parent;
-   struct sysfs_dirent *s_sibling;
-   const char *s_name;
-
-   union
-   {
-      struct sysfs_elem_dir s_dir;
-      struct sysfs_elem_symlink s_symlink;
-      struct sysfs_elem_attr s_attr;
-      struct sysfs_elem_bin_attr s_bin_attr;
-   };
-
-   unsigned int s_flags;
-   ino_t s_ino;
-   umode_t s_mode;
-   struct sysfs_inode_attrs *s_iattr;
-};
-
-struct class_private {
-	struct kset class_subsys;
-	struct klist class_devices;
-	struct list_head class_interfaces;
-	struct kset class_dirs;
-	struct mutex class_mutex;
-	struct class *class;
-};
-
-#define to_class(obj)	\
-	container_of(obj, struct class_private, class_subsys.kobj)
-
-#endif
-
-/*
-	struct sysfs_dirent *attr_sd = dentry->d_fsdata;
-	struct kobject *kobj = attr_sd->s_parent->s_dir.kobj;
-*/
-
-static inline struct kobject * to_kobj (struct dentry * dentry)
-{
-   struct sysfs_dirent * sd = dentry->d_fsdata;
-   if ( sd )
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
-      return ((struct kobject *) sd->s_element );
-#else
-      return ((struct kobject *) sd->s_parent->s_dir.kobj );
-#endif
-   else
-      return NULL;
-}
-
-//#define to_class(obj) container_of(obj, struct class, subsys.kset.kobj)
-
 /**************************************************************************/
 
 #include "fusd.h"
@@ -2240,132 +2159,11 @@ STATIC int fusd_register_device (fusd_dev_t *fusd_dev,
       goto register_failed3;
    }
 
-   /* look up class in sysfs */
-   {
-      struct CLASS *sys_class = NULL;
-      struct file_system_type *sysfs = get_fs_type("sysfs");
-      struct dentry *classdir = NULL;
-      struct dentry *classdir2 = NULL;
-      struct super_block *sb = NULL;
 
-      if ( sysfs )
-      {
-         /* Get FS superblock */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
-         sb = sget(sysfs, systest, NULL, 0, NULL);
-#else
-         sb = sget(sysfs, systest, NULL, NULL);
-#endif
-         /* because put_filesystem isn't exported */
-         module_put(sysfs->owner);
+	fusd_dev->device = CLASS_DEVICE_CREATE(fusd_class, NULL, fusd_dev->dev_id, NULL, fusd_dev->dev_name);
 
-         if ( sb )
-         {
-            /* Take root entry from SuperBlock */
-            struct dentry *root = sb->s_root;
-		
-            if ( root )
-            {
-               struct qstr name;
-
-	            /* Search for directory "class" in the root of this filesystem */
-               name.name = "class";
-               name.len = 5;
-               name.hash = FULL_NAME_HASH(name.name, name.len);
-
-               classdir = d_lookup(root, &name);
-
-               if ( classdir )
-               {
-                  /* Found, now search for class wanted name */
-                  name.name = register_msg.clazz;
-                  name.len = strlen(name.name);
-                  name.hash = FULL_NAME_HASH(name.name, name.len);
-                  classdir2 = d_lookup(classdir, &name);
-
-                  if ( classdir2 )
-                  {
-                     // jackpot.  extract the class.
-                     struct kobject *ko = to_kobj(classdir2);
-                     sys_class = ( ko ? to_class(ko)->class : NULL );
 
-#if 0
-                     if ( sys_class )
-                     {
-                        /* W T F ???? Using an existing sys_class will led to a NULL pointer crash
-                         * during device creation.. Need more investigation, this comportement is clearly not
-                         * normal. */
-                        RDEBUG(1, "ERROR: Using existing class name is currently unsported !!!");
-                        goto register_failed4;
-                     }
-#endif
-                     if ( !sys_class )
-                        RDEBUG(2, "WARNING: sysfs entry for %s has no kobject!\n", register_msg.clazz);
-                  }
-
-               }
-               else
-               {
-                  RDEBUG(2, "WARNING: sysfs does not list a class directory!\n");
-               }
-            }
-            else
-            {
-               RDEBUG(2, "WARNING: unable to access root firectory in sysfs!\n");
-            }
-         }
-         else
-         {
-            RDEBUG(2, "WARNING: unable to access superblock for sysfs!\n");
-         }
-      }
-      else
-      {
-         RDEBUG(2, "WARNING: sysfs not mounted or unavailable!\n");
-      }
-
-      if ( sys_class )
-      {
-         RDEBUG(3, "Found entry for class '%s' in sysfs\n", register_msg.clazz);
-         fusd_dev->clazz = sys_class;
-         fusd_dev->owns_class = 0;
-      }
-      else
-      {
-         RDEBUG(3, "Sysfs has no entry for '%s'; registering new class\n", register_msg.clazz);
-         fusd_dev->clazz = class_create(THIS_MODULE, fusd_dev->class_name);
-         if ( IS_ERR(fusd_dev->clazz) )
-         {
-            error = PTR_ERR(fusd_dev->clazz);
-            printk(KERN_ERR "class_create failed status: %d\n", error);
-            goto register_failed4;
-         }
-         fusd_dev->owns_class = 1;
-      }
-
-      if ( classdir )
-         dput(classdir);
-      if ( classdir2 )
-         dput(classdir2);
-
-      if ( sb )
-      {
-         up_write(&sb->s_umount);
-         deactivate_super(sb);
-      }
-   }
 
-   /* Dump sys_class */
-   RDEBUG(9, "fusd_dev->clazz = { .name='%s' .owner=%p .class_attrs=%p\n"
-             ".dev_attrs=%p .dev_kobj=%p .dev_uevent=%p\n"
-	     ".devnode=%p .class_release=%p .dev_release=%p\n"
-             ".suspend=%p .resume=%p .pm=%p\n"
-             ".p = %p };", 
-	     fusd_dev->clazz->name, fusd_dev->clazz->owner, fusd_dev->clazz->class_attrs,
-	     fusd_dev->clazz->dev_attrs, fusd_dev->clazz->dev_kobj, fusd_dev->clazz->dev_uevent,
-             fusd_dev->clazz->devnode, fusd_dev->clazz->class_release, fusd_dev->clazz->dev_release,
-             fusd_dev->clazz->suspend, fusd_dev->clazz->resume, fusd_dev->clazz->pm, fusd_dev->clazz->p);
-   fusd_dev->device = CLASS_DEVICE_CREATE(fusd_dev->clazz, NULL, fusd_dev->dev_id, NULL, fusd_dev->dev_name);
    if ( fusd_dev->device == NULL )
    {
       error = PTR_ERR(fusd_dev->device);
@@ -2393,7 +2191,6 @@ STATIC int fusd_register_device (fusd_dev_t *fusd_dev,
 register_failed5:
    class_destroy(fusd_dev->clazz);
    fusd_dev->clazz = NULL;
-register_failed4:
    cdev_del(fusd_dev->handle);
    fusd_dev->handle = NULL;
 register_failed3: