|
@@ -334,6 +334,7 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
|
|
|
struct reservation_object *resv = exp_info->resv;
|
|
|
struct file *file;
|
|
|
size_t alloc_size = sizeof(struct dma_buf);
|
|
|
+ int ret;
|
|
|
|
|
|
if (!exp_info->resv)
|
|
|
alloc_size += sizeof(struct reservation_object);
|
|
@@ -357,8 +358,8 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
|
|
|
|
|
|
dmabuf = kzalloc(alloc_size, GFP_KERNEL);
|
|
|
if (!dmabuf) {
|
|
|
- module_put(exp_info->owner);
|
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto err_module;
|
|
|
}
|
|
|
|
|
|
dmabuf->priv = exp_info->priv;
|
|
@@ -379,8 +380,8 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
|
|
|
file = anon_inode_getfile("dmabuf", &dma_buf_fops, dmabuf,
|
|
|
exp_info->flags);
|
|
|
if (IS_ERR(file)) {
|
|
|
- kfree(dmabuf);
|
|
|
- return ERR_CAST(file);
|
|
|
+ ret = PTR_ERR(file);
|
|
|
+ goto err_dmabuf;
|
|
|
}
|
|
|
|
|
|
file->f_mode |= FMODE_LSEEK;
|
|
@@ -394,6 +395,12 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
|
|
|
mutex_unlock(&db_list.lock);
|
|
|
|
|
|
return dmabuf;
|
|
|
+
|
|
|
+err_dmabuf:
|
|
|
+ kfree(dmabuf);
|
|
|
+err_module:
|
|
|
+ module_put(exp_info->owner);
|
|
|
+ return ERR_PTR(ret);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(dma_buf_export);
|
|
|
|