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

Commit 1cb36012 authored by Jeff Layton's avatar Jeff Layton Committed by Al Viro
Browse files

locks: comment cleanups and clarifications

parent d4f22d19
Loading
Loading
Loading
Loading
+13 −8
Original line number Original line Diff line number Diff line
@@ -518,9 +518,10 @@ static void locks_insert_block(struct file_lock *blocker,
		list_add(&waiter->fl_link, &blocked_list);
		list_add(&waiter->fl_link, &blocked_list);
}
}


/* Wake up processes blocked waiting for blocker.
/*
 * If told to wait then schedule the processes until the block list
 * Wake up processes blocked waiting for blocker.
 * is empty, otherwise empty the block list ourselves.
 *
 * Must be called with the file_lock_lock held!
 */
 */
static void locks_wake_up_blocks(struct file_lock *blocker)
static void locks_wake_up_blocks(struct file_lock *blocker)
{
{
@@ -806,6 +807,11 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
	}
	}


	lock_flocks();
	lock_flocks();
	/*
	 * New lock request. Walk all POSIX locks and look for conflicts. If
	 * there are any, either return error or put the request on the
	 * blocker's list of waiters and the global blocked_list.
	 */
	if (request->fl_type != F_UNLCK) {
	if (request->fl_type != F_UNLCK) {
		for_each_lock(inode, before) {
		for_each_lock(inode, before) {
			fl = *before;
			fl = *before;
@@ -930,10 +936,9 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
	}
	}


	/*
	/*
	 * The above code only modifies existing locks in case of
	 * The above code only modifies existing locks in case of merging or
	 * merging or replacing.  If new lock(s) need to be inserted
	 * replacing. If new lock(s) need to be inserted all modifications are
	 * all modifications are done bellow this, so it's safe yet to
	 * done below this, so it's safe yet to bail out.
	 * bail out.
	 */
	 */
	error = -ENOLCK; /* "no luck" */
	error = -ENOLCK; /* "no luck" */
	if (right && left == right && !new_fl2)
	if (right && left == right && !new_fl2)
+18 −0
Original line number Original line Diff line number Diff line
@@ -926,6 +926,24 @@ int locks_in_grace(struct net *);
/* that will die - we need it for nfs_lock_info */
/* that will die - we need it for nfs_lock_info */
#include <linux/nfs_fs_i.h>
#include <linux/nfs_fs_i.h>


/*
 * struct file_lock represents a generic "file lock". It's used to represent
 * POSIX byte range locks, BSD (flock) locks, and leases. It's important to
 * note that the same struct is used to represent both a request for a lock and
 * the lock itself, but the same object is never used for both.
 *
 * FIXME: should we create a separate "struct lock_request" to help distinguish
 * these two uses?
 *
 * The i_flock list is ordered by:
 *
 * 1) lock type -- FL_LEASEs first, then FL_FLOCK, and finally FL_POSIX
 * 2) lock owner
 * 3) lock range start
 * 4) lock range end
 *
 * Obviously, the last two criteria only matter for POSIX locks.
 */
struct file_lock {
struct file_lock {
	struct file_lock *fl_next;	/* singly linked list for this inode  */
	struct file_lock *fl_next;	/* singly linked list for this inode  */
	struct list_head fl_link;	/* doubly linked list of all locks */
	struct list_head fl_link;	/* doubly linked list of all locks */