drm: use proc_create_data()
authorAlexey Dobriyan <adobriyan@gmail.com>
Fri, 28 Aug 2009 18:58:07 +0000 (22:58 +0400)
committerDave Airlie <airlied@redhat.com>
Sun, 30 Aug 2009 23:37:22 +0000 (09:37 +1000)
airlied: fixup race against drm info by filling out
tmp before adding it to proc.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/drm_proc.c

index dc967af7a33c1e16c930cd79c3b8808190ac81a3..d379c4f2892f1bad75b1d1e9eedd7c1afd127d5c 100644 (file)
@@ -110,20 +110,21 @@ int drm_proc_create_files(struct drm_info_list *files, int count,
                        ret = -1;
                        goto fail;
                }
-               ent = create_proc_entry(files[i].name, S_IFREG | S_IRUGO, root);
+               tmp->minor = minor;
+               tmp->info_ent = &files[i];
+               list_add(&tmp->list, &minor->proc_nodes.list);
+
+               ent = proc_create_data(files[i].name, S_IRUGO, root,
+                                      &drm_proc_fops, tmp);
                if (!ent) {
                        DRM_ERROR("Cannot create /proc/dri/%s/%s\n",
                                  name, files[i].name);
+                       list_del(&tmp->list);
                        kfree(tmp);
                        ret = -1;
                        goto fail;
                }
 
-               ent->proc_fops = &drm_proc_fops;
-               ent->data = tmp;
-               tmp->minor = minor;
-               tmp->info_ent = &files[i];
-               list_add(&(tmp->list), &(minor->proc_nodes.list));
        }
        return 0;