Commit 3b85d302 authored by Al Viro's avatar Al Viro

media: switch to fdget()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent fb386243
...@@ -246,38 +246,38 @@ static const struct file_operations request_fops = { ...@@ -246,38 +246,38 @@ static const struct file_operations request_fops = {
struct media_request * struct media_request *
media_request_get_by_fd(struct media_device *mdev, int request_fd) media_request_get_by_fd(struct media_device *mdev, int request_fd)
{ {
struct file *filp; struct fd f;
struct media_request *req; struct media_request *req;
if (!mdev || !mdev->ops || if (!mdev || !mdev->ops ||
!mdev->ops->req_validate || !mdev->ops->req_queue) !mdev->ops->req_validate || !mdev->ops->req_queue)
return ERR_PTR(-EACCES); return ERR_PTR(-EACCES);
filp = fget(request_fd); f = fdget(request_fd);
if (!filp) if (!f.file)
goto err_no_req_fd; goto err_no_req_fd;
if (filp->f_op != &request_fops) if (f.file->f_op != &request_fops)
goto err_fput; goto err_fput;
req = filp->private_data; req = f.file->private_data;
if (req->mdev != mdev) if (req->mdev != mdev)
goto err_fput; goto err_fput;
/* /*
* Note: as long as someone has an open filehandle of the request, * Note: as long as someone has an open filehandle of the request,
* the request can never be released. The fget() above ensures that * the request can never be released. The fdget() above ensures that
* even if userspace closes the request filehandle, the release() * even if userspace closes the request filehandle, the release()
* fop won't be called, so the media_request_get() always succeeds * fop won't be called, so the media_request_get() always succeeds
* and there is no race condition where the request was released * and there is no race condition where the request was released
* before media_request_get() is called. * before media_request_get() is called.
*/ */
media_request_get(req); media_request_get(req);
fput(filp); fdput(f);
return req; return req;
err_fput: err_fput:
fput(filp); fdput(f);
err_no_req_fd: err_no_req_fd:
dev_dbg(mdev->dev, "cannot find request_fd %d\n", request_fd); dev_dbg(mdev->dev, "cannot find request_fd %d\n", request_fd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment