Commit 82a8cb96 authored by Jeff Layton's avatar Jeff Layton Committed by Christian Brauner

afs: adapt to breakup of struct file_lock

Most of the existing APIs have remained the same, but subsystems that
access file_lock fields directly need to reach into struct
file_lock_core now.
Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
Link: https://lore.kernel.org/r/20240131-flsplit-v3-35-c6129007ee8d@kernel.orgReviewed-by: default avatarNeilBrown <neilb@suse.de>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 459c814a
...@@ -121,16 +121,15 @@ static void afs_next_locker(struct afs_vnode *vnode, int error) ...@@ -121,16 +121,15 @@ static void afs_next_locker(struct afs_vnode *vnode, int error)
list_for_each_entry_safe(p, _p, &vnode->pending_locks, fl_u.afs.link) { list_for_each_entry_safe(p, _p, &vnode->pending_locks, fl_u.afs.link) {
if (error && if (error &&
p->fl_type == type && p->c.flc_type == type &&
afs_file_key(p->fl_file) == key) { afs_file_key(p->c.flc_file) == key) {
list_del_init(&p->fl_u.afs.link); list_del_init(&p->fl_u.afs.link);
p->fl_u.afs.state = error; p->fl_u.afs.state = error;
locks_wake_up(p); locks_wake_up(p);
} }
/* Select the next locker to hand off to. */ /* Select the next locker to hand off to. */
if (next && if (next && (lock_is_write(next) || lock_is_read(p)))
(lock_is_write(next) || lock_is_read(p)))
continue; continue;
next = p; next = p;
} }
...@@ -464,7 +463,7 @@ static int afs_do_setlk(struct file *file, struct file_lock *fl) ...@@ -464,7 +463,7 @@ static int afs_do_setlk(struct file *file, struct file_lock *fl)
_enter("{%llx:%llu},%llu-%llu,%u,%u", _enter("{%llx:%llu},%llu-%llu,%u,%u",
vnode->fid.vid, vnode->fid.vnode, vnode->fid.vid, vnode->fid.vnode,
fl->fl_start, fl->fl_end, fl->fl_type, mode); fl->fl_start, fl->fl_end, fl->c.flc_type, mode);
fl->fl_ops = &afs_lock_ops; fl->fl_ops = &afs_lock_ops;
INIT_LIST_HEAD(&fl->fl_u.afs.link); INIT_LIST_HEAD(&fl->fl_u.afs.link);
...@@ -524,7 +523,7 @@ static int afs_do_setlk(struct file *file, struct file_lock *fl) ...@@ -524,7 +523,7 @@ static int afs_do_setlk(struct file *file, struct file_lock *fl)
} }
if (vnode->lock_state == AFS_VNODE_LOCK_NONE && if (vnode->lock_state == AFS_VNODE_LOCK_NONE &&
!(fl->fl_flags & FL_SLEEP)) { !(fl->c.flc_flags & FL_SLEEP)) {
ret = -EAGAIN; ret = -EAGAIN;
if (type == AFS_LOCK_READ) { if (type == AFS_LOCK_READ) {
if (vnode->status.lock_count == -1) if (vnode->status.lock_count == -1)
...@@ -621,7 +620,7 @@ static int afs_do_setlk(struct file *file, struct file_lock *fl) ...@@ -621,7 +620,7 @@ static int afs_do_setlk(struct file *file, struct file_lock *fl)
return 0; return 0;
lock_is_contended: lock_is_contended:
if (!(fl->fl_flags & FL_SLEEP)) { if (!(fl->c.flc_flags & FL_SLEEP)) {
list_del_init(&fl->fl_u.afs.link); list_del_init(&fl->fl_u.afs.link);
afs_next_locker(vnode, 0); afs_next_locker(vnode, 0);
ret = -EAGAIN; ret = -EAGAIN;
...@@ -641,7 +640,7 @@ static int afs_do_setlk(struct file *file, struct file_lock *fl) ...@@ -641,7 +640,7 @@ static int afs_do_setlk(struct file *file, struct file_lock *fl)
spin_unlock(&vnode->lock); spin_unlock(&vnode->lock);
trace_afs_flock_ev(vnode, fl, afs_flock_waiting, 0); trace_afs_flock_ev(vnode, fl, afs_flock_waiting, 0);
ret = wait_event_interruptible(fl->fl_wait, ret = wait_event_interruptible(fl->c.flc_wait,
fl->fl_u.afs.state != AFS_LOCK_PENDING); fl->fl_u.afs.state != AFS_LOCK_PENDING);
trace_afs_flock_ev(vnode, fl, afs_flock_waited, ret); trace_afs_flock_ev(vnode, fl, afs_flock_waited, ret);
...@@ -704,7 +703,8 @@ static int afs_do_unlk(struct file *file, struct file_lock *fl) ...@@ -704,7 +703,8 @@ static int afs_do_unlk(struct file *file, struct file_lock *fl)
struct afs_vnode *vnode = AFS_FS_I(file_inode(file)); struct afs_vnode *vnode = AFS_FS_I(file_inode(file));
int ret; int ret;
_enter("{%llx:%llu},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type); _enter("{%llx:%llu},%u", vnode->fid.vid, vnode->fid.vnode,
fl->c.flc_type);
trace_afs_flock_op(vnode, fl, afs_flock_op_unlock); trace_afs_flock_op(vnode, fl, afs_flock_op_unlock);
...@@ -730,7 +730,7 @@ static int afs_do_getlk(struct file *file, struct file_lock *fl) ...@@ -730,7 +730,7 @@ static int afs_do_getlk(struct file *file, struct file_lock *fl)
if (vnode->lock_state == AFS_VNODE_LOCK_DELETED) if (vnode->lock_state == AFS_VNODE_LOCK_DELETED)
return -ENOENT; return -ENOENT;
fl->fl_type = F_UNLCK; fl->c.flc_type = F_UNLCK;
/* check local lock records first */ /* check local lock records first */
posix_test_lock(file, fl); posix_test_lock(file, fl);
...@@ -743,18 +743,18 @@ static int afs_do_getlk(struct file *file, struct file_lock *fl) ...@@ -743,18 +743,18 @@ static int afs_do_getlk(struct file *file, struct file_lock *fl)
lock_count = READ_ONCE(vnode->status.lock_count); lock_count = READ_ONCE(vnode->status.lock_count);
if (lock_count != 0) { if (lock_count != 0) {
if (lock_count > 0) if (lock_count > 0)
fl->fl_type = F_RDLCK; fl->c.flc_type = F_RDLCK;
else else
fl->fl_type = F_WRLCK; fl->c.flc_type = F_WRLCK;
fl->fl_start = 0; fl->fl_start = 0;
fl->fl_end = OFFSET_MAX; fl->fl_end = OFFSET_MAX;
fl->fl_pid = 0; fl->c.flc_pid = 0;
} }
} }
ret = 0; ret = 0;
error: error:
_leave(" = %d [%hd]", ret, fl->fl_type); _leave(" = %d [%hd]", ret, fl->c.flc_type);
return ret; return ret;
} }
...@@ -769,7 +769,7 @@ int afs_lock(struct file *file, int cmd, struct file_lock *fl) ...@@ -769,7 +769,7 @@ int afs_lock(struct file *file, int cmd, struct file_lock *fl)
_enter("{%llx:%llu},%d,{t=%x,fl=%x,r=%Ld:%Ld}", _enter("{%llx:%llu},%d,{t=%x,fl=%x,r=%Ld:%Ld}",
vnode->fid.vid, vnode->fid.vnode, cmd, vnode->fid.vid, vnode->fid.vnode, cmd,
fl->fl_type, fl->fl_flags, fl->c.flc_type, fl->c.flc_flags,
(long long) fl->fl_start, (long long) fl->fl_end); (long long) fl->fl_start, (long long) fl->fl_end);
if (IS_GETLK(cmd)) if (IS_GETLK(cmd))
...@@ -804,7 +804,7 @@ int afs_flock(struct file *file, int cmd, struct file_lock *fl) ...@@ -804,7 +804,7 @@ int afs_flock(struct file *file, int cmd, struct file_lock *fl)
_enter("{%llx:%llu},%d,{t=%x,fl=%x}", _enter("{%llx:%llu},%d,{t=%x,fl=%x}",
vnode->fid.vid, vnode->fid.vnode, cmd, vnode->fid.vid, vnode->fid.vnode, cmd,
fl->fl_type, fl->fl_flags); fl->c.flc_type, fl->c.flc_flags);
/* /*
* No BSD flocks over NFS allowed. * No BSD flocks over NFS allowed.
...@@ -813,7 +813,7 @@ int afs_flock(struct file *file, int cmd, struct file_lock *fl) ...@@ -813,7 +813,7 @@ int afs_flock(struct file *file, int cmd, struct file_lock *fl)
* Not sure whether that would be unique, though, or whether * Not sure whether that would be unique, though, or whether
* that would break in other places. * that would break in other places.
*/ */
if (!(fl->fl_flags & FL_FLOCK)) if (!(fl->c.flc_flags & FL_FLOCK))
return -ENOLCK; return -ENOLCK;
fl->fl_u.afs.debug_id = atomic_inc_return(&afs_file_lock_debug_id); fl->fl_u.afs.debug_id = atomic_inc_return(&afs_file_lock_debug_id);
...@@ -843,7 +843,7 @@ int afs_flock(struct file *file, int cmd, struct file_lock *fl) ...@@ -843,7 +843,7 @@ int afs_flock(struct file *file, int cmd, struct file_lock *fl)
*/ */
static void afs_fl_copy_lock(struct file_lock *new, struct file_lock *fl) static void afs_fl_copy_lock(struct file_lock *new, struct file_lock *fl)
{ {
struct afs_vnode *vnode = AFS_FS_I(file_inode(fl->fl_file)); struct afs_vnode *vnode = AFS_FS_I(file_inode(fl->c.flc_file));
_enter(""); _enter("");
...@@ -861,7 +861,7 @@ static void afs_fl_copy_lock(struct file_lock *new, struct file_lock *fl) ...@@ -861,7 +861,7 @@ static void afs_fl_copy_lock(struct file_lock *new, struct file_lock *fl)
*/ */
static void afs_fl_release_private(struct file_lock *fl) static void afs_fl_release_private(struct file_lock *fl)
{ {
struct afs_vnode *vnode = AFS_FS_I(file_inode(fl->fl_file)); struct afs_vnode *vnode = AFS_FS_I(file_inode(fl->c.flc_file));
_enter(""); _enter("");
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#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>
......
...@@ -1164,8 +1164,8 @@ TRACE_EVENT(afs_flock_op, ...@@ -1164,8 +1164,8 @@ TRACE_EVENT(afs_flock_op,
__entry->from = fl->fl_start; __entry->from = fl->fl_start;
__entry->len = fl->fl_end - fl->fl_start + 1; __entry->len = fl->fl_end - fl->fl_start + 1;
__entry->op = op; __entry->op = op;
__entry->type = fl->fl_type; __entry->type = fl->c.flc_type;
__entry->flags = fl->fl_flags; __entry->flags = fl->c.flc_flags;
__entry->debug_id = fl->fl_u.afs.debug_id; __entry->debug_id = fl->fl_u.afs.debug_id;
), ),
......
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