diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
index 0767a93e4d9136c9f79bd46f1d041e4e7433ca1a..639297250c210ce5bd9dffaa1ba4a910b1cb8417 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
@@ -53,26 +53,25 @@ static int amdgpu_sched_process_priority_override(struct amdgpu_device *adev,
 						  int fd,
 						  enum drm_sched_priority priority)
 {
-	struct file *filp = fget(fd);
+	struct fd f = fdget(fd);
 	struct amdgpu_fpriv *fpriv;
 	struct amdgpu_ctx *ctx;
 	uint32_t id;
 	int r;
 
-	if (!filp)
+	if (!f.file)
 		return -EINVAL;
 
-	r = amdgpu_file_to_fpriv(filp, &fpriv);
+	r = amdgpu_file_to_fpriv(f.file, &fpriv);
 	if (r) {
-		fput(filp);
+		fdput(f);
 		return r;
 	}
 
 	idr_for_each_entry(&fpriv->ctx_mgr.ctx_handles, ctx, id)
 		amdgpu_ctx_priority_override(ctx, priority);
 
-	fput(filp);
-
+	fdput(f);
 	return 0;
 }
 
@@ -81,30 +80,30 @@ static int amdgpu_sched_context_priority_override(struct amdgpu_device *adev,
 						  unsigned ctx_id,
 						  enum drm_sched_priority priority)
 {
-	struct file *filp = fget(fd);
+	struct fd f = fdget(fd);
 	struct amdgpu_fpriv *fpriv;
 	struct amdgpu_ctx *ctx;
 	int r;
 
-	if (!filp)
+	if (!f.file)
 		return -EINVAL;
 
-	r = amdgpu_file_to_fpriv(filp, &fpriv);
+	r = amdgpu_file_to_fpriv(f.file, &fpriv);
 	if (r) {
-		fput(filp);
+		fdput(f);
 		return r;
 	}
 
 	ctx = amdgpu_ctx_get(fpriv, ctx_id);
 
 	if (!ctx) {
-		fput(filp);
+		fdput(f);
 		return -EINVAL;
 	}
 
 	amdgpu_ctx_priority_override(ctx, priority);
 	amdgpu_ctx_put(ctx);
-	fput(filp);
+	fdput(f);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index e19525af0ccee11e39277c589beaeb8811d8c0b2..8bdb4a3bd7bf130d7f2e8fc83dcf4c8eaeb8db74 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -388,20 +388,19 @@ static int drm_syncobj_fd_to_handle(struct drm_file *file_private,
 				    int fd, u32 *handle)
 {
 	struct drm_syncobj *syncobj;
-	struct file *file;
+	struct fd f = fdget(fd);
 	int ret;
 
-	file = fget(fd);
-	if (!file)
+	if (!f.file)
 		return -EINVAL;
 
-	if (file->f_op != &drm_syncobj_file_fops) {
-		fput(file);
+	if (f.file->f_op != &drm_syncobj_file_fops) {
+		fdput(f);
 		return -EINVAL;
 	}
 
 	/* take a reference to put in the idr */
-	syncobj = file->private_data;
+	syncobj = f.file->private_data;
 	drm_syncobj_get(syncobj);
 
 	idr_preload(GFP_KERNEL);
@@ -416,7 +415,7 @@ static int drm_syncobj_fd_to_handle(struct drm_file *file_private,
 	} else
 		drm_syncobj_put(syncobj);
 
-	fput(file);
+	fdput(f);
 	return ret;
 }
 
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 8558e81fdc2af85dd52486b7c8d55580fe997373..3c724cc949a5fbb41e2f702e69f1c5d6767e1fe2 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4354,7 +4354,7 @@ static bool discard_backing_storage(struct drm_i915_gem_object *obj)
 	 * acquiring such a reference whilst we are in the middle of
 	 * freeing the object.
 	 */
-	return atomic_long_read(&obj->base.filp->f_count) == 1;
+	return file_count(obj->base.filp) == 1;
 }
 
 static void __i915_gem_free_objects(struct drm_i915_private *i915,
diff --git a/drivers/media/media-request.c b/drivers/media/media-request.c
index eec2e2b2f6eca53a3eb29c1129bf0bf481b831ad..9e5fd2ac769e53091d60369b1f978d3df4dcdf8c 100644
--- a/drivers/media/media-request.c
+++ b/drivers/media/media-request.c
@@ -246,38 +246,38 @@ static const struct file_operations request_fops = {
 struct media_request *
 media_request_get_by_fd(struct media_device *mdev, int request_fd)
 {
-	struct file *filp;
+	struct fd f;
 	struct media_request *req;
 
 	if (!mdev || !mdev->ops ||
 	    !mdev->ops->req_validate || !mdev->ops->req_queue)
 		return ERR_PTR(-EACCES);
 
-	filp = fget(request_fd);
-	if (!filp)
+	f = fdget(request_fd);
+	if (!f.file)
 		goto err_no_req_fd;
 
-	if (filp->f_op != &request_fops)
+	if (f.file->f_op != &request_fops)
 		goto err_fput;
-	req = filp->private_data;
+	req = f.file->private_data;
 	if (req->mdev != mdev)
 		goto err_fput;
 
 	/*
 	 * 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()
 	 * fop won't be called, so the media_request_get() always succeeds
 	 * and there is no race condition where the request was released
 	 * before media_request_get() is called.
 	 */
 	media_request_get(req);
-	fput(filp);
+	fdput(f);
 
 	return req;
 
 err_fput:
-	fput(filp);
+	fdput(f);
 
 err_no_req_fd:
 	dev_dbg(mdev->dev, "cannot find request_fd %d\n", request_fd);
diff --git a/include/linux/fs.h b/include/linux/fs.h
index ec07f4c5630d35250b76e797cd0c8c8b6b3e4712..49d048ea0afbe5463cb612dd384bddea0bc3eb6b 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -975,7 +975,6 @@ static inline struct file *get_file(struct file *f)
 #define get_file_rcu_many(x, cnt)	\
 	atomic_long_add_unless(&(x)->f_count, (cnt), 0)
 #define get_file_rcu(x) get_file_rcu_many((x), 1)
-#define fput_atomic(x)	atomic_long_add_unless(&(x)->f_count, -1, 1)
 #define file_count(x)	atomic_long_read(&(x)->f_count)
 
 #define	MAX_NON_LFS	((1UL<<31) - 1)