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:
Jeff Layton 2024-01-31 18:02:18 -05:00 committed by Christian Brauner
parent 3956f35fbd
commit 966b7bd3ca
No known key found for this signature in database
GPG Key ID: 91C61BC06578DCA2

View File

@ -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;