Commit a69ce85e authored by Jeff Layton's avatar Jeff Layton Committed by Christian Brauner

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: default avatarJeff Layton <jlayton@kernel.org>
Link: https://lore.kernel.org/r/20240131-flsplit-v3-17-c6129007ee8d@kernel.orgReviewed-by: default avatarNeilBrown <neilb@suse.de>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 3d40f781
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/file.h> #include <linux/file.h>
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/ktime.h> #include <linux/ktime.h>
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/rxrpc.h> #include <linux/rxrpc.h>
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "super.h" #include "super.h"
#include "mds_client.h" #include "mds_client.h"
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/ceph/pagelist.h> #include <linux/ceph/pagelist.h>
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
*/ */
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/miscdevice.h> #include <linux/miscdevice.h>
#include <linux/poll.h> #include <linux/poll.h>
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/falloc.h> #include <linux/falloc.h>
#include <linux/uio.h> #include <linux/uio.h>
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/splice.h> #include <linux/splice.h>
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/mount.h> #include <linux/mount.h>
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/gfs2_ondisk.h> #include <linux/gfs2_ondisk.h>
#include <linux/falloc.h> #include <linux/falloc.h>
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/nfs_fs.h> #include <linux/nfs_fs.h>
#include <linux/utsname.h> #include <linux/utsname.h>
......
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
* children. * children.
* *
*/ */
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/capability.h> #include <linux/capability.h>
#include <linux/file.h> #include <linux/file.h>
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <linux/swap.h> #include <linux/swap.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include "delegation.h" #include "delegation.h"
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#define NFS4_MAX_LOOP_ON_RECOVER (10) #define NFS4_MAX_LOOP_ON_RECOVER (10)
#include <linux/seqlock.h> #include <linux/seqlock.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
struct idmap; struct idmap;
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/freezer.h> #include <linux/freezer.h>
#include <linux/wait.h> #include <linux/wait.h>
#include <linux/iversion.h> #include <linux/iversion.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <net/net_namespace.h> #include <net/net_namespace.h>
#include <net/netns/generic.h> #include <net/netns/generic.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/percpu_counter.h> #include <linux/percpu_counter.h>
#include <linux/siphash.h> #include <linux/siphash.h>
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
*/ */
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/fcntl.h> #include <linux/fcntl.h>
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/miscdevice.h> #include <linux/miscdevice.h>
#include <linux/mutex.h> #include <linux/mutex.h>
......
...@@ -1364,7 +1364,7 @@ struct file *filp_open(const char *filename, int flags, umode_t mode) ...@@ -1364,7 +1364,7 @@ struct file *filp_open(const char *filename, int flags, umode_t mode)
{ {
struct filename *name = getname_kernel(filename); struct filename *name = getname_kernel(filename);
struct file *file = ERR_CAST(name); struct file *file = ERR_CAST(name);
if (!IS_ERR(name)) { if (!IS_ERR(name)) {
file = file_open_name(name, flags, mode); file = file_open_name(name, flags, mode);
putname(name); putname(name);
......
...@@ -786,12 +786,12 @@ struct posix_acl *posix_acl_from_xattr(struct user_namespace *userns, ...@@ -786,12 +786,12 @@ struct posix_acl *posix_acl_from_xattr(struct user_namespace *userns,
return ERR_PTR(count); return ERR_PTR(count);
if (count == 0) if (count == 0)
return NULL; return NULL;
acl = posix_acl_alloc(count, GFP_NOFS); acl = posix_acl_alloc(count, GFP_NOFS);
if (!acl) if (!acl)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
acl_e = acl->a_entries; acl_e = acl->a_entries;
for (end = entry + count; entry != end; acl_e++, entry++) { for (end = entry + count; entry != end; acl_e++, entry++) {
acl_e->e_tag = le16_to_cpu(entry->e_tag); acl_e->e_tag = le16_to_cpu(entry->e_tag);
acl_e->e_perm = le16_to_cpu(entry->e_perm); acl_e->e_perm = le16_to_cpu(entry->e_perm);
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <uapi/linux/cifs/cifs_mount.h> #include <uapi/linux/cifs/cifs_mount.h>
#include "../common/smb2pdu.h" #include "../common/smb2pdu.h"
#include "smb2pdu.h" #include "smb2pdu.h"
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#define SMB_PATH_MAX 260 #define SMB_PATH_MAX 260
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
/* want to reuse a stale file handle and only the caller knows the file info */ /* want to reuse a stale file handle and only the caller knows the file info */
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/vfs.h> #include <linux/vfs.h>
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
* *
*/ */
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/backing-dev.h> #include <linux/backing-dev.h>
#include <linux/stat.h> #include <linux/stat.h>
...@@ -2951,7 +2952,7 @@ static int cifs_writepages_region(struct address_space *mapping, ...@@ -2951,7 +2952,7 @@ static int cifs_writepages_region(struct address_space *mapping,
continue; continue;
} }
folio_batch_release(&fbatch); folio_batch_release(&fbatch);
cond_resched(); cond_resched();
} while (wbc->nr_to_write > 0); } while (wbc->nr_to_write > 0);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
* *
*/ */
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/slab.h> #include <linux/slab.h>
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/ethtool.h> #include <linux/ethtool.h>
#include <linux/falloc.h> #include <linux/falloc.h>
#include <linux/mount.h> #include <linux/mount.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include "glob.h" #include "glob.h"
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/backing-dev.h> #include <linux/backing-dev.h>
......
...@@ -85,23 +85,28 @@ bool opens_in_grace(struct net *); ...@@ -85,23 +85,28 @@ bool opens_in_grace(struct net *);
* *
* Obviously, the last two criteria only matter for POSIX locks. * 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 file_lock_core {
struct list_head fl_list; /* link into file_lock_context */ struct file_lock *flc_blocker; /* The lock that is blocking us */
struct hlist_node fl_link; /* node in global lists */ struct list_head flc_list; /* link into file_lock_context */
struct list_head fl_blocked_requests; /* list of requests with struct hlist_node flc_link; /* node in global lists */
struct list_head flc_blocked_requests; /* list of requests with
* ->fl_blocker pointing here * ->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_blocker->fl_blocked_requests
*/ */
fl_owner_t fl_owner; fl_owner_t flc_owner;
unsigned int fl_flags; unsigned int flc_flags;
unsigned char fl_type; unsigned char flc_type;
pid_t fl_pid; pid_t flc_pid;
int fl_link_cpu; /* what cpu's list is this on? */ int flc_link_cpu; /* what cpu's list is this on? */
wait_queue_head_t fl_wait; wait_queue_head_t flc_wait;
struct file *fl_file; struct file *flc_file;
};
struct file_lock {
struct file_lock_core c;
loff_t fl_start; loff_t fl_start;
loff_t fl_end; loff_t fl_end;
...@@ -126,6 +131,22 @@ struct file_lock { ...@@ -126,6 +131,22 @@ struct file_lock {
} fl_u; } fl_u;
} __randomize_layout; } __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 { struct file_lock_context {
spinlock_t flc_lock; spinlock_t flc_lock;
struct list_head flc_flock; struct list_head flc_flock;
...@@ -149,26 +170,26 @@ int fcntl_getlease(struct file *filp); ...@@ -149,26 +170,26 @@ int fcntl_getlease(struct file *filp);
static inline bool lock_is_unlock(struct file_lock *fl) 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) 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) 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) 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 */ /* 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 */ /* fs/locks.c */
void locks_free_lock_context(struct inode *inode); void locks_free_lock_context(struct inode *inode);
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#define LOCKD_XDR_H #define LOCKD_XDR_H
#include <linux/fs.h> #include <linux/fs.h>
#define _NEED_FILE_LOCK_FIELD_MACROS
#include <linux/filelock.h> #include <linux/filelock.h>
#include <linux/nfs.h> #include <linux/nfs.h>
#include <linux/sunrpc/xdr.h> #include <linux/sunrpc/xdr.h>
...@@ -52,7 +53,7 @@ struct nlm_lock { ...@@ -52,7 +53,7 @@ struct nlm_lock {
* FreeBSD uses 16, Apple Mac OS X 10.3 uses 20. Therefore we set it to * FreeBSD uses 16, Apple Mac OS X 10.3 uses 20. Therefore we set it to
* 32 bytes. * 32 bytes.
*/ */
struct nlm_cookie struct nlm_cookie
{ {
unsigned char data[NLM_MAXCOOKIELEN]; unsigned char data[NLM_MAXCOOKIELEN];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment