diff options
author | Dave Airlie <airlied@linux.ie> | 2004-08-24 11:15:53 +0000 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2004-08-24 11:15:53 +0000 |
commit | d4dbf457813e97531ded3bf24f3b6ad421189c69 (patch) | |
tree | 8e47c1dd5d7cf9c8c4bce4a7e34531fc9a8eae75 /linux-core/drm_fops.c | |
parent | eac498baeaf9b57b448065b0fb9f4eeadbb9aa6b (diff) |
Merged drmfntbl-0-0-2
Diffstat (limited to 'linux-core/drm_fops.c')
-rw-r--r-- | linux-core/drm_fops.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/linux-core/drm_fops.c b/linux-core/drm_fops.c index d21f7898..4589231f 100644 --- a/linux-core/drm_fops.c +++ b/linux-core/drm_fops.c @@ -54,6 +54,7 @@ int DRM(open_helper)(struct inode *inode, struct file *filp, drm_device_t *dev) { int minor = iminor(inode); drm_file_t *priv; + int ret; if (filp->f_flags & O_EXCL) return -EBUSY; /* No exclusive opens */ if (!DRM(cpu_valid)()) return -EINVAL; @@ -74,7 +75,11 @@ int DRM(open_helper)(struct inode *inode, struct file *filp, drm_device_t *dev) priv->lock_count = 0; if (dev->fn_tbl.open_helper) - dev->fn_tbl.open_helper(dev, priv); + { + ret=dev->fn_tbl.open_helper(dev, priv); + if (ret < 0) + goto out_free; + } down(&dev->struct_sem); if (!dev->file_last) { @@ -106,6 +111,9 @@ int DRM(open_helper)(struct inode *inode, struct file *filp, drm_device_t *dev) #endif return 0; + out_free: + DRM(free)(priv, sizeof(*priv), DRM_MEM_FILES); + return ret; } /** No-op. */ |