Commit 459c814a authored by Jeff Layton's avatar Jeff Layton Committed by Christian Brauner

9p: 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-34-c6129007ee8d@kernel.orgReviewed-by: default avatarNeilBrown <neilb@suse.de>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent a1c2af32
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#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>
...@@ -108,7 +107,7 @@ static int v9fs_file_lock(struct file *filp, int cmd, struct file_lock *fl) ...@@ -108,7 +107,7 @@ static int v9fs_file_lock(struct file *filp, int cmd, struct file_lock *fl)
p9_debug(P9_DEBUG_VFS, "filp: %p lock: %p\n", filp, fl); p9_debug(P9_DEBUG_VFS, "filp: %p lock: %p\n", filp, fl);
if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->fl_type != F_UNLCK) { if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->c.flc_type != F_UNLCK) {
filemap_write_and_wait(inode->i_mapping); filemap_write_and_wait(inode->i_mapping);
invalidate_mapping_pages(&inode->i_data, 0, -1); invalidate_mapping_pages(&inode->i_data, 0, -1);
} }
...@@ -127,7 +126,7 @@ static int v9fs_file_do_lock(struct file *filp, int cmd, struct file_lock *fl) ...@@ -127,7 +126,7 @@ static int v9fs_file_do_lock(struct file *filp, int cmd, struct file_lock *fl)
fid = filp->private_data; fid = filp->private_data;
BUG_ON(fid == NULL); BUG_ON(fid == NULL);
BUG_ON((fl->fl_flags & FL_POSIX) != FL_POSIX); BUG_ON((fl->c.flc_flags & FL_POSIX) != FL_POSIX);
res = locks_lock_file_wait(filp, fl); res = locks_lock_file_wait(filp, fl);
if (res < 0) if (res < 0)
...@@ -136,7 +135,7 @@ static int v9fs_file_do_lock(struct file *filp, int cmd, struct file_lock *fl) ...@@ -136,7 +135,7 @@ static int v9fs_file_do_lock(struct file *filp, int cmd, struct file_lock *fl)
/* convert posix lock to p9 tlock args */ /* convert posix lock to p9 tlock args */
memset(&flock, 0, sizeof(flock)); memset(&flock, 0, sizeof(flock));
/* map the lock type */ /* map the lock type */
switch (fl->fl_type) { switch (fl->c.flc_type) {
case F_RDLCK: case F_RDLCK:
flock.type = P9_LOCK_TYPE_RDLCK; flock.type = P9_LOCK_TYPE_RDLCK;
break; break;
...@@ -152,7 +151,7 @@ static int v9fs_file_do_lock(struct file *filp, int cmd, struct file_lock *fl) ...@@ -152,7 +151,7 @@ static int v9fs_file_do_lock(struct file *filp, int cmd, struct file_lock *fl)
flock.length = 0; flock.length = 0;
else else
flock.length = fl->fl_end - fl->fl_start + 1; flock.length = fl->fl_end - fl->fl_start + 1;
flock.proc_id = fl->fl_pid; flock.proc_id = fl->c.flc_pid;
flock.client_id = fid->clnt->name; flock.client_id = fid->clnt->name;
if (IS_SETLKW(cmd)) if (IS_SETLKW(cmd))
flock.flags = P9_LOCK_FLAGS_BLOCK; flock.flags = P9_LOCK_FLAGS_BLOCK;
...@@ -207,13 +206,13 @@ static int v9fs_file_do_lock(struct file *filp, int cmd, struct file_lock *fl) ...@@ -207,13 +206,13 @@ static int v9fs_file_do_lock(struct file *filp, int cmd, struct file_lock *fl)
* incase server returned error for lock request, revert * incase server returned error for lock request, revert
* it locally * it locally
*/ */
if (res < 0 && fl->fl_type != F_UNLCK) { if (res < 0 && fl->c.flc_type != F_UNLCK) {
unsigned char type = fl->fl_type; unsigned char type = fl->c.flc_type;
fl->fl_type = F_UNLCK; fl->c.flc_type = F_UNLCK;
/* Even if this fails we want to return the remote error */ /* Even if this fails we want to return the remote error */
locks_lock_file_wait(filp, fl); locks_lock_file_wait(filp, fl);
fl->fl_type = type; fl->c.flc_type = type;
} }
if (flock.client_id != fid->clnt->name) if (flock.client_id != fid->clnt->name)
kfree(flock.client_id); kfree(flock.client_id);
...@@ -235,7 +234,7 @@ static int v9fs_file_getlock(struct file *filp, struct file_lock *fl) ...@@ -235,7 +234,7 @@ static int v9fs_file_getlock(struct file *filp, struct file_lock *fl)
* if we have a conflicting lock locally, no need to validate * if we have a conflicting lock locally, no need to validate
* with server * with server
*/ */
if (fl->fl_type != F_UNLCK) if (fl->c.flc_type != F_UNLCK)
return res; return res;
/* convert posix lock to p9 tgetlock args */ /* convert posix lock to p9 tgetlock args */
...@@ -246,7 +245,7 @@ static int v9fs_file_getlock(struct file *filp, struct file_lock *fl) ...@@ -246,7 +245,7 @@ static int v9fs_file_getlock(struct file *filp, struct file_lock *fl)
glock.length = 0; glock.length = 0;
else else
glock.length = fl->fl_end - fl->fl_start + 1; glock.length = fl->fl_end - fl->fl_start + 1;
glock.proc_id = fl->fl_pid; glock.proc_id = fl->c.flc_pid;
glock.client_id = fid->clnt->name; glock.client_id = fid->clnt->name;
res = p9_client_getlock_dotl(fid, &glock); res = p9_client_getlock_dotl(fid, &glock);
...@@ -255,13 +254,13 @@ static int v9fs_file_getlock(struct file *filp, struct file_lock *fl) ...@@ -255,13 +254,13 @@ static int v9fs_file_getlock(struct file *filp, struct file_lock *fl)
/* map 9p lock type to os lock type */ /* map 9p lock type to os lock type */
switch (glock.type) { switch (glock.type) {
case P9_LOCK_TYPE_RDLCK: case P9_LOCK_TYPE_RDLCK:
fl->fl_type = F_RDLCK; fl->c.flc_type = F_RDLCK;
break; break;
case P9_LOCK_TYPE_WRLCK: case P9_LOCK_TYPE_WRLCK:
fl->fl_type = F_WRLCK; fl->c.flc_type = F_WRLCK;
break; break;
case P9_LOCK_TYPE_UNLCK: case P9_LOCK_TYPE_UNLCK:
fl->fl_type = F_UNLCK; fl->c.flc_type = F_UNLCK;
break; break;
} }
if (glock.type != P9_LOCK_TYPE_UNLCK) { if (glock.type != P9_LOCK_TYPE_UNLCK) {
...@@ -270,7 +269,7 @@ static int v9fs_file_getlock(struct file *filp, struct file_lock *fl) ...@@ -270,7 +269,7 @@ static int v9fs_file_getlock(struct file *filp, struct file_lock *fl)
fl->fl_end = OFFSET_MAX; fl->fl_end = OFFSET_MAX;
else else
fl->fl_end = glock.start + glock.length - 1; fl->fl_end = glock.start + glock.length - 1;
fl->fl_pid = -glock.proc_id; fl->c.flc_pid = -glock.proc_id;
} }
out: out:
if (glock.client_id != fid->clnt->name) if (glock.client_id != fid->clnt->name)
...@@ -294,7 +293,7 @@ static int v9fs_file_lock_dotl(struct file *filp, int cmd, struct file_lock *fl) ...@@ -294,7 +293,7 @@ static int v9fs_file_lock_dotl(struct file *filp, int cmd, struct file_lock *fl)
p9_debug(P9_DEBUG_VFS, "filp: %p cmd:%d lock: %p name: %pD\n", p9_debug(P9_DEBUG_VFS, "filp: %p cmd:%d lock: %p name: %pD\n",
filp, cmd, fl, filp); filp, cmd, fl, filp);
if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->fl_type != F_UNLCK) { if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->c.flc_type != F_UNLCK) {
filemap_write_and_wait(inode->i_mapping); filemap_write_and_wait(inode->i_mapping);
invalidate_mapping_pages(&inode->i_data, 0, -1); invalidate_mapping_pages(&inode->i_data, 0, -1);
} }
...@@ -325,16 +324,16 @@ static int v9fs_file_flock_dotl(struct file *filp, int cmd, ...@@ -325,16 +324,16 @@ static int v9fs_file_flock_dotl(struct file *filp, int cmd,
p9_debug(P9_DEBUG_VFS, "filp: %p cmd:%d lock: %p name: %pD\n", p9_debug(P9_DEBUG_VFS, "filp: %p cmd:%d lock: %p name: %pD\n",
filp, cmd, fl, filp); filp, cmd, fl, filp);
if (!(fl->fl_flags & FL_FLOCK)) if (!(fl->c.flc_flags & FL_FLOCK))
goto out_err; goto out_err;
if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->fl_type != F_UNLCK) { if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->c.flc_type != F_UNLCK) {
filemap_write_and_wait(inode->i_mapping); filemap_write_and_wait(inode->i_mapping);
invalidate_mapping_pages(&inode->i_data, 0, -1); invalidate_mapping_pages(&inode->i_data, 0, -1);
} }
/* Convert flock to posix lock */ /* Convert flock to posix lock */
fl->fl_flags |= FL_POSIX; fl->c.flc_flags |= FL_POSIX;
fl->fl_flags ^= FL_FLOCK; fl->c.flc_flags ^= FL_FLOCK;
if (IS_SETLK(cmd) | IS_SETLKW(cmd)) if (IS_SETLK(cmd) | IS_SETLKW(cmd))
ret = v9fs_file_do_lock(filp, cmd, fl); ret = v9fs_file_do_lock(filp, cmd, fl);
......
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