Эх сурвалжийг харах

VFS: Add support for the FL_ACCESS flag to flock_lock_file()

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Trond Myklebust 19 жил өмнө
parent
commit
f07f18dd6f
1 өөрчлөгдсөн 5 нэмэгдсэн , 0 устгасан
  1. 5 0
      fs/locks.c

+ 5 - 0
fs/locks.c

@@ -739,6 +739,8 @@ static int flock_lock_file(struct file *filp, struct file_lock *request)
 	int found = 0;
 	int found = 0;
 
 
 	lock_kernel();
 	lock_kernel();
+	if (request->fl_flags & FL_ACCESS)
+		goto find_conflict;
 	for_each_lock(inode, before) {
 	for_each_lock(inode, before) {
 		struct file_lock *fl = *before;
 		struct file_lock *fl = *before;
 		if (IS_POSIX(fl))
 		if (IS_POSIX(fl))
@@ -771,6 +773,7 @@ static int flock_lock_file(struct file *filp, struct file_lock *request)
 	if (found)
 	if (found)
 		cond_resched();
 		cond_resched();
 
 
+find_conflict:
 	for_each_lock(inode, before) {
 	for_each_lock(inode, before) {
 		struct file_lock *fl = *before;
 		struct file_lock *fl = *before;
 		if (IS_POSIX(fl))
 		if (IS_POSIX(fl))
@@ -784,6 +787,8 @@ static int flock_lock_file(struct file *filp, struct file_lock *request)
 			locks_insert_block(fl, request);
 			locks_insert_block(fl, request);
 		goto out;
 		goto out;
 	}
 	}
+	if (request->fl_flags & FL_ACCESS)
+		goto out;
 	locks_copy_lock(new_fl, request);
 	locks_copy_lock(new_fl, request);
 	locks_insert_lock(&inode->i_flock, new_fl);
 	locks_insert_lock(&inode->i_flock, new_fl);
 	new_fl = NULL;
 	new_fl = NULL;