mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-11-01 09:13:37 +00:00
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: Jeff Layton <jlayton@kernel.org> Link: https://lore.kernel.org/r/20240131-flsplit-v3-35-c6129007ee8d@kernel.org Reviewed-by: NeilBrown <neilb@suse.de> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
459c814a3c
commit
82a8cb96b2
3 changed files with 21 additions and 22 deletions
|
|
@ -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)
|
||||||
|
|
||||||
_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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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 @@ skip_server_lock:
|
||||||
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 @@ need_to_wait:
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
_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)
|
||||||
|
|
||||||
_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)
|
||||||
* 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)
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
*/
|
*/
|
||||||
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 @@
|
||||||
#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,
|
||||||
__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;
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue