summaryrefslogtreecommitdiff
path: root/include/linux/filelock.h
diff options
context:
space:
mode:
authorJeff Layton <jlayton@kernel.org>2024-02-01 02:01:58 +0300
committerChristian Brauner <brauner@kernel.org>2024-02-05 15:11:38 +0300
commita69ce85ec9af6bdc0b3511959a7dc1a324e5e16a (patch)
tree4df18a2921afb3ad3a002210fad2f84a32fa2425 /include/linux/filelock.h
parent3d40f78169a0a954ff06e2b0f8e21463f7edb433 (diff)
downloadlinux-a69ce85ec9af6bdc0b3511959a7dc1a324e5e16a.tar.xz
filelock: split common fields into struct file_lock_core
In a future patch, we're going to split file leases into their own structure. Since a lot of the underlying machinery uses the same fields move those into a new file_lock_core, and embed that inside struct file_lock. For now, add some macros to ensure that we can continue to build while the conversion is in progress. Signed-off-by: Jeff Layton <jlayton@kernel.org> Link: https://lore.kernel.org/r/20240131-flsplit-v3-17-c6129007ee8d@kernel.org Reviewed-by: NeilBrown <neilb@suse.de> Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'include/linux/filelock.h')
-rw-r--r--include/linux/filelock.h57
1 files changed, 39 insertions, 18 deletions
diff --git a/include/linux/filelock.h b/include/linux/filelock.h
index a3cb59b7922a..d1fba98744a7 100644
--- a/include/linux/filelock.h
+++ b/include/linux/filelock.h
@@ -85,23 +85,28 @@ bool opens_in_grace(struct net *);
*
* Obviously, the last two criteria only matter for POSIX locks.
*/
-struct file_lock {
- struct file_lock *fl_blocker; /* The lock, that is blocking us */
- struct list_head fl_list; /* link into file_lock_context */
- struct hlist_node fl_link; /* node in global lists */
- struct list_head fl_blocked_requests; /* list of requests with
+
+struct file_lock_core {
+ struct file_lock *flc_blocker; /* The lock that is blocking us */
+ struct list_head flc_list; /* link into file_lock_context */
+ struct hlist_node flc_link; /* node in global lists */
+ struct list_head flc_blocked_requests; /* list of requests with
* ->fl_blocker pointing here
*/
- struct list_head fl_blocked_member; /* node in
+ struct list_head flc_blocked_member; /* node in
* ->fl_blocker->fl_blocked_requests
*/
- fl_owner_t fl_owner;
- unsigned int fl_flags;
- unsigned char fl_type;
- pid_t fl_pid;
- int fl_link_cpu; /* what cpu's list is this on? */
- wait_queue_head_t fl_wait;
- struct file *fl_file;
+ fl_owner_t flc_owner;
+ unsigned int flc_flags;
+ unsigned char flc_type;
+ pid_t flc_pid;
+ int flc_link_cpu; /* what cpu's list is this on? */
+ wait_queue_head_t flc_wait;
+ struct file *flc_file;
+};
+
+struct file_lock {
+ struct file_lock_core c;
loff_t fl_start;
loff_t fl_end;
@@ -126,6 +131,22 @@ struct file_lock {
} fl_u;
} __randomize_layout;
+/* Temporary macros to allow building during coccinelle conversion */
+#ifdef _NEED_FILE_LOCK_FIELD_MACROS
+#define fl_list c.flc_list
+#define fl_blocker c.flc_blocker
+#define fl_link c.flc_link
+#define fl_blocked_requests c.flc_blocked_requests
+#define fl_blocked_member c.flc_blocked_member
+#define fl_owner c.flc_owner
+#define fl_flags c.flc_flags
+#define fl_type c.flc_type
+#define fl_pid c.flc_pid
+#define fl_link_cpu c.flc_link_cpu
+#define fl_wait c.flc_wait
+#define fl_file c.flc_file
+#endif
+
struct file_lock_context {
spinlock_t flc_lock;
struct list_head flc_flock;
@@ -149,26 +170,26 @@ int fcntl_getlease(struct file *filp);
static inline bool lock_is_unlock(struct file_lock *fl)
{
- return fl->fl_type == F_UNLCK;
+ return fl->c.flc_type == F_UNLCK;
}
static inline bool lock_is_read(struct file_lock *fl)
{
- return fl->fl_type == F_RDLCK;
+ return fl->c.flc_type == F_RDLCK;
}
static inline bool lock_is_write(struct file_lock *fl)
{
- return fl->fl_type == F_WRLCK;
+ return fl->c.flc_type == F_WRLCK;
}
static inline void locks_wake_up(struct file_lock *fl)
{
- wake_up(&fl->fl_wait);
+ wake_up(&fl->c.flc_wait);
}
/* for walking lists of file_locks linked by fl_list */
-#define for_each_file_lock(_fl, _head) list_for_each_entry(_fl, _head, fl_list)
+#define for_each_file_lock(_fl, _head) list_for_each_entry(_fl, _head, c.flc_list)
/* fs/locks.c */
void locks_free_lock_context(struct inode *inode);