+static char *obdfs_read_opt(const char *opt, char *data)
+{
+ char *value;
+ char *retval;
+
+ CDEBUG(D_SUPER, "option: %s, data %s\n", opt, data);
+ if ( strncmp(opt, data, strlen(opt)) )
+ return NULL;
+
+ if ( (value = strchr(data, '=')) == NULL )
+ return NULL;
+
+ value++;
+ OBD_ALLOC(retval, char *, strlen(value) + 1);
+ if ( !retval ) {
+ printk("OBDFS: Out of memory!\n");
+ return NULL;
+ }
+
+ memcpy(retval, value, strlen(value)+1);
+ CDEBUG(D_SUPER, "Assigned option: %s, value %s\n", opt, retval);
+ return retval;
+}
+
+void obdfs_options(char *options, char **dev, char **vers)
+{
+ char *this_char;
+
+ if (!options)
+ return;
+
+ for (this_char = strtok (options, ",");
+ this_char != NULL;
+ this_char = strtok (NULL, ",")) {
+ CDEBUG(D_SUPER, "this_char %s\n", this_char);
+ if ( (!*dev && (*dev = obdfs_read_opt("device", this_char)))||
+ (!*vers && (*vers = obdfs_read_opt("version", this_char))) )
+ continue;
+
+ }
+}
+
+static int obdfs_getdev(char *devpath, int *dev)
+{
+ struct dentry *dentry;
+ kdev_t devno;
+
+ dentry = lookup_dentry(devpath, NULL, 0);
+ if (IS_ERR(dentry))
+ return PTR_ERR(dentry);
+
+ if (!S_ISCHR(dentry->d_inode->i_mode))
+ return -ENODEV;
+
+ devno = dentry->d_inode->i_rdev;
+ if ( MAJOR(devno) != OBD_PSDEV_MAJOR )
+ return -ENODEV;
+
+ if ( MINOR(devno) >= MAX_OBD_DEVICES )
+ return -ENODEV;
+
+ *dev = devno;
+ return 0;
+}