mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 17:25:38 +00:00
dlm: 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-37-c6129007ee8d@kernel.org Reviewed-by: NeilBrown <neilb@suse.de> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
3956f35fbd
commit
966b7bd3ca
@ -4,7 +4,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#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>
|
||||||
@ -139,14 +138,14 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
|||||||
}
|
}
|
||||||
|
|
||||||
op->info.optype = DLM_PLOCK_OP_LOCK;
|
op->info.optype = DLM_PLOCK_OP_LOCK;
|
||||||
op->info.pid = fl->fl_pid;
|
op->info.pid = fl->c.flc_pid;
|
||||||
op->info.ex = (lock_is_write(fl));
|
op->info.ex = lock_is_write(fl);
|
||||||
op->info.wait = !!(fl->fl_flags & FL_SLEEP);
|
op->info.wait = !!(fl->c.flc_flags & FL_SLEEP);
|
||||||
op->info.fsid = ls->ls_global_id;
|
op->info.fsid = ls->ls_global_id;
|
||||||
op->info.number = number;
|
op->info.number = number;
|
||||||
op->info.start = fl->fl_start;
|
op->info.start = fl->fl_start;
|
||||||
op->info.end = fl->fl_end;
|
op->info.end = fl->fl_end;
|
||||||
op->info.owner = (__u64)(long)fl->fl_owner;
|
op->info.owner = (__u64)(long) fl->c.flc_owner;
|
||||||
/* async handling */
|
/* async handling */
|
||||||
if (fl->fl_lmops && fl->fl_lmops->lm_grant) {
|
if (fl->fl_lmops && fl->fl_lmops->lm_grant) {
|
||||||
op_data = kzalloc(sizeof(*op_data), GFP_NOFS);
|
op_data = kzalloc(sizeof(*op_data), GFP_NOFS);
|
||||||
@ -259,7 +258,7 @@ static int dlm_plock_callback(struct plock_op *op)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* got fs lock; bookkeep locally as well: */
|
/* got fs lock; bookkeep locally as well: */
|
||||||
flc->fl_flags &= ~FL_SLEEP;
|
flc->c.flc_flags &= ~FL_SLEEP;
|
||||||
if (posix_lock_file(file, flc, NULL)) {
|
if (posix_lock_file(file, flc, NULL)) {
|
||||||
/*
|
/*
|
||||||
* This can only happen in the case of kmalloc() failure.
|
* This can only happen in the case of kmalloc() failure.
|
||||||
@ -292,7 +291,7 @@ int dlm_posix_unlock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
|||||||
struct dlm_ls *ls;
|
struct dlm_ls *ls;
|
||||||
struct plock_op *op;
|
struct plock_op *op;
|
||||||
int rv;
|
int rv;
|
||||||
unsigned char saved_flags = fl->fl_flags;
|
unsigned char saved_flags = fl->c.flc_flags;
|
||||||
|
|
||||||
ls = dlm_find_lockspace_local(lockspace);
|
ls = dlm_find_lockspace_local(lockspace);
|
||||||
if (!ls)
|
if (!ls)
|
||||||
@ -305,7 +304,7 @@ int dlm_posix_unlock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* cause the vfs unlock to return ENOENT if lock is not found */
|
/* cause the vfs unlock to return ENOENT if lock is not found */
|
||||||
fl->fl_flags |= FL_EXISTS;
|
fl->c.flc_flags |= FL_EXISTS;
|
||||||
|
|
||||||
rv = locks_lock_file_wait(file, fl);
|
rv = locks_lock_file_wait(file, fl);
|
||||||
if (rv == -ENOENT) {
|
if (rv == -ENOENT) {
|
||||||
@ -318,14 +317,14 @@ int dlm_posix_unlock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
|||||||
}
|
}
|
||||||
|
|
||||||
op->info.optype = DLM_PLOCK_OP_UNLOCK;
|
op->info.optype = DLM_PLOCK_OP_UNLOCK;
|
||||||
op->info.pid = fl->fl_pid;
|
op->info.pid = fl->c.flc_pid;
|
||||||
op->info.fsid = ls->ls_global_id;
|
op->info.fsid = ls->ls_global_id;
|
||||||
op->info.number = number;
|
op->info.number = number;
|
||||||
op->info.start = fl->fl_start;
|
op->info.start = fl->fl_start;
|
||||||
op->info.end = fl->fl_end;
|
op->info.end = fl->fl_end;
|
||||||
op->info.owner = (__u64)(long)fl->fl_owner;
|
op->info.owner = (__u64)(long) fl->c.flc_owner;
|
||||||
|
|
||||||
if (fl->fl_flags & FL_CLOSE) {
|
if (fl->c.flc_flags & FL_CLOSE) {
|
||||||
op->info.flags |= DLM_PLOCK_FL_CLOSE;
|
op->info.flags |= DLM_PLOCK_FL_CLOSE;
|
||||||
send_op(op);
|
send_op(op);
|
||||||
rv = 0;
|
rv = 0;
|
||||||
@ -346,7 +345,7 @@ int dlm_posix_unlock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
|||||||
dlm_release_plock_op(op);
|
dlm_release_plock_op(op);
|
||||||
out:
|
out:
|
||||||
dlm_put_lockspace(ls);
|
dlm_put_lockspace(ls);
|
||||||
fl->fl_flags = saved_flags;
|
fl->c.flc_flags = saved_flags;
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dlm_posix_unlock);
|
EXPORT_SYMBOL_GPL(dlm_posix_unlock);
|
||||||
@ -376,14 +375,14 @@ int dlm_posix_cancel(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
memset(&info, 0, sizeof(info));
|
memset(&info, 0, sizeof(info));
|
||||||
info.pid = fl->fl_pid;
|
info.pid = fl->c.flc_pid;
|
||||||
info.ex = (lock_is_write(fl));
|
info.ex = lock_is_write(fl);
|
||||||
info.fsid = ls->ls_global_id;
|
info.fsid = ls->ls_global_id;
|
||||||
dlm_put_lockspace(ls);
|
dlm_put_lockspace(ls);
|
||||||
info.number = number;
|
info.number = number;
|
||||||
info.start = fl->fl_start;
|
info.start = fl->fl_start;
|
||||||
info.end = fl->fl_end;
|
info.end = fl->fl_end;
|
||||||
info.owner = (__u64)(long)fl->fl_owner;
|
info.owner = (__u64)(long) fl->c.flc_owner;
|
||||||
|
|
||||||
rv = do_lock_cancel(&info);
|
rv = do_lock_cancel(&info);
|
||||||
switch (rv) {
|
switch (rv) {
|
||||||
@ -438,13 +437,13 @@ int dlm_posix_get(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
|||||||
}
|
}
|
||||||
|
|
||||||
op->info.optype = DLM_PLOCK_OP_GET;
|
op->info.optype = DLM_PLOCK_OP_GET;
|
||||||
op->info.pid = fl->fl_pid;
|
op->info.pid = fl->c.flc_pid;
|
||||||
op->info.ex = (lock_is_write(fl));
|
op->info.ex = lock_is_write(fl);
|
||||||
op->info.fsid = ls->ls_global_id;
|
op->info.fsid = ls->ls_global_id;
|
||||||
op->info.number = number;
|
op->info.number = number;
|
||||||
op->info.start = fl->fl_start;
|
op->info.start = fl->fl_start;
|
||||||
op->info.end = fl->fl_end;
|
op->info.end = fl->fl_end;
|
||||||
op->info.owner = (__u64)(long)fl->fl_owner;
|
op->info.owner = (__u64)(long) fl->c.flc_owner;
|
||||||
|
|
||||||
send_op(op);
|
send_op(op);
|
||||||
wait_event(recv_wq, (op->done != 0));
|
wait_event(recv_wq, (op->done != 0));
|
||||||
@ -456,16 +455,16 @@ int dlm_posix_get(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
|||||||
|
|
||||||
rv = op->info.rv;
|
rv = op->info.rv;
|
||||||
|
|
||||||
fl->fl_type = F_UNLCK;
|
fl->c.flc_type = F_UNLCK;
|
||||||
if (rv == -ENOENT)
|
if (rv == -ENOENT)
|
||||||
rv = 0;
|
rv = 0;
|
||||||
else if (rv > 0) {
|
else if (rv > 0) {
|
||||||
locks_init_lock(fl);
|
locks_init_lock(fl);
|
||||||
fl->fl_type = (op->info.ex) ? F_WRLCK : F_RDLCK;
|
fl->c.flc_type = (op->info.ex) ? F_WRLCK : F_RDLCK;
|
||||||
fl->fl_flags = FL_POSIX;
|
fl->c.flc_flags = FL_POSIX;
|
||||||
fl->fl_pid = op->info.pid;
|
fl->c.flc_pid = op->info.pid;
|
||||||
if (op->info.nodeid != dlm_our_nodeid())
|
if (op->info.nodeid != dlm_our_nodeid())
|
||||||
fl->fl_pid = -fl->fl_pid;
|
fl->c.flc_pid = -fl->c.flc_pid;
|
||||||
fl->fl_start = op->info.start;
|
fl->fl_start = op->info.start;
|
||||||
fl->fl_end = op->info.end;
|
fl->fl_end = op->info.end;
|
||||||
rv = 0;
|
rv = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user