public inbox for linux-unionfs@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 1/2] fs/locks: add flock_setlk to help set flock
@ 2018-03-29  9:08 yangerkun
  2018-03-29  9:36 ` Amir Goldstein
  2018-03-30 10:46 ` Jeff Layton
  0 siblings, 2 replies; 5+ messages in thread
From: yangerkun @ 2018-03-29  9:08 UTC (permalink / raw)
  To: jlayton, miklos, amir73il; +Cc: linux-unionfs, yi.zhang, miaoxie, yangerkun

Split sys_flock(), add flock_setlk() routine to help kernel set
flock easily.

Signed-off-by: yangerkun <yangerkun@huawei.com>
---
 fs/locks.c         | 29 +++++++++++++++++------------
 include/linux/fs.h |  1 +
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/fs/locks.c b/fs/locks.c
index d6ff4be..aeef6cf 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -1974,6 +1974,22 @@ int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl)
 }
 EXPORT_SYMBOL(locks_lock_inode_wait);
 
+int flock_setlk(struct file *filp, struct file_lock *lock)
+{
+	int err;
+
+	err = security_file_lock(filp, lock->fl_type);
+	if (err)
+		return err;
+
+	if (filp->f_op->flock && is_remote_lock(filp))
+		return filp->f_op->flock(filp,
+					(lock->fl_flags & FL_SLEEP) ? F_SETLKW : F_SETLK,
+					lock);
+	else
+		return locks_lock_file_wait(filp, lock);
+}
+
 /**
  *	sys_flock: - flock() system call.
  *	@fd: the file descriptor to lock.
@@ -2019,18 +2035,7 @@ int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl)
 	if (can_sleep)
 		lock->fl_flags |= FL_SLEEP;
 
-	error = security_file_lock(f.file, lock->fl_type);
-	if (error)
-		goto out_free;
-
-	if (f.file->f_op->flock && is_remote_lock(f.file))
-		error = f.file->f_op->flock(f.file,
-					  (can_sleep) ? F_SETLKW : F_SETLK,
-					  lock);
-	else
-		error = locks_lock_file_wait(f.file, lock);
-
- out_free:
+	error = flock_setlk(f.file, lock);
 	locks_free_lock(lock);
 
  out_putf:
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 2a81556..3dab90c 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1090,6 +1090,7 @@ extern int fcntl_setlk64(unsigned int, struct file *, unsigned int,
 extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *);
 extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl);
 extern int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl);
+extern int flock_setlk(struct file *filp, struct file_lock *fl);
 extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type);
 extern void lease_get_mtime(struct inode *, struct timespec *time);
 extern int generic_setlease(struct file *, long, struct file_lock **, void **priv);
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-03-30 13:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-29  9:08 [RFC PATCH 1/2] fs/locks: add flock_setlk to help set flock yangerkun
2018-03-29  9:36 ` Amir Goldstein
2018-03-30 10:46 ` Jeff Layton
2018-03-30 11:25   ` Amir Goldstein
2018-03-30 13:40     ` Jeff Layton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox