Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c97d7b1 authored by Kinglong Mee's avatar Kinglong Mee Committed by Jeff Layton
Browse files

locks: New ops in lock_manager_operations for get/put owner



NFSD or other lockmanager may increase the owner's reference,
so adds two new options for copying and releasing owner.

v5: change order from 2/6 to 3/6
v4: rename lm_copy_owner/lm_release_owner to lm_get_owner/lm_put_owner

Reviewed-by: default avatarJeff Layton <jlayton@primarydata.com>
Signed-off-by: default avatarKinglong Mee <kinglongmee@gmail.com>
Signed-off-by: default avatarJeff Layton <jlayton@primarydata.com>
parent 3fe0fff1
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -230,8 +230,12 @@ void locks_release_private(struct file_lock *fl)
			fl->fl_ops->fl_release_private(fl);
		fl->fl_ops = NULL;
	}
	fl->fl_lmops = NULL;

	if (fl->fl_lmops) {
		if (fl->fl_lmops->lm_put_owner)
			fl->fl_lmops->lm_put_owner(fl);
		fl->fl_lmops = NULL;
	}
}
EXPORT_SYMBOL_GPL(locks_release_private);

@@ -274,9 +278,13 @@ static void locks_copy_private(struct file_lock *new, struct file_lock *fl)
			fl->fl_ops->fl_copy_lock(new, fl);
		new->fl_ops = fl->fl_ops;
	}
	if (fl->fl_lmops)

	if (fl->fl_lmops) {
		if (fl->fl_lmops->lm_get_owner)
			fl->fl_lmops->lm_get_owner(new, fl);
		new->fl_lmops = fl->fl_lmops;
	}
}

/*
 * Initialize a new lock from an existing file_lock structure.
+2 −0
Original line number Diff line number Diff line
@@ -868,6 +868,8 @@ struct file_lock_operations {
struct lock_manager_operations {
	int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
	unsigned long (*lm_owner_key)(struct file_lock *);
	void (*lm_get_owner)(struct file_lock *, struct file_lock *);
	void (*lm_put_owner)(struct file_lock *);
	void (*lm_notify)(struct file_lock *);	/* unblock callback */
	int (*lm_grant)(struct file_lock *, int);
	void (*lm_break)(struct file_lock *);