return 0;
 }
 
+static int nubus_rsrc_proc_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, nubus_proc_rsrc_show, inode);
+}
+
+static const struct proc_ops nubus_rsrc_proc_ops = {
+       .proc_open      = nubus_rsrc_proc_open,
+       .proc_read      = seq_read,
+       .proc_lseek     = seq_lseek,
+       .proc_release   = single_release,
+};
+
 void nubus_proc_add_rsrc_mem(struct proc_dir_entry *procdir,
                             const struct nubus_dirent *ent,
                             unsigned int size)
                pded = nubus_proc_alloc_pde_data(nubus_dirptr(ent), size);
        else
                pded = NULL;
-       proc_create_single_data(name, S_IFREG | 0444, procdir,
-                       nubus_proc_rsrc_show, pded);
+       proc_create_data(name, S_IFREG | 0444, procdir,
+                        &nubus_rsrc_proc_ops, pded);
 }
 
 void nubus_proc_add_rsrc(struct proc_dir_entry *procdir,
                return;
 
        snprintf(name, sizeof(name), "%x", ent->type);
-       proc_create_single_data(name, S_IFREG | 0444, procdir,
-                       nubus_proc_rsrc_show,
-                       nubus_proc_alloc_pde_data(data, 0));
+       proc_create_data(name, S_IFREG | 0444, procdir,
+                        &nubus_rsrc_proc_ops,
+                        nubus_proc_alloc_pde_data(data, 0));
 }
 
 /*