From: Sachin Prabhu <sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Jeff Layton <jlayton-vpEMnDpepFuMZCB2o+C8xQ@public.gmane.org>,
smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Cc: samba-technical-w/Ol4Ecudpl8XjKLYN78aQ@public.gmane.org,
linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] cifs: stuff the fl_owner into "pid" field in the lock request
Date: Wed, 25 May 2016 12:04:11 +0100 [thread overview]
Message-ID: <1464174251.13286.1.camel@redhat.com> (raw)
In-Reply-To: <1464085664-4391-1-git-send-email-jeff.layton-7I+n7zu2hftEKMMhf/gKZA@public.gmane.org>
On Tue, 2016-05-24 at 06:27 -0400, Jeff Layton wrote:
> Right now, we send the tgid cross the wire. What we really want to
> send
> though is a hashed fl_owner_t since samba treats this field as a
> generic
> lockowner.
>
> It turns out that because we enforce and release locks locally before
> they are ever sent to the server, this patch makes no difference in
> behavior. Still, setting OFD locks on the server using the process
> pid seems wrong, so I think this patch still makes sense.
>
> Signed-off-by: Jeff Layton <jeff.layton-7I+n7zu2hftEKMMhf/gKZA@public.gmane.org>
Acked-by: Sachin Prabhu <sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
> fs/cifs/cifsfs.c | 3 +++
> fs/cifs/cifsglob.h | 1 +
> fs/cifs/file.c | 14 +++++++++++---
> 3 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
> index 08fa36e5b2bc..1ef5b8aee878 100644
> --- a/fs/cifs/cifsfs.c
> +++ b/fs/cifs/cifsfs.c
> @@ -87,6 +87,7 @@ extern mempool_t *cifs_req_poolp;
> extern mempool_t *cifs_mid_poolp;
>
> struct workqueue_struct *cifsiod_wq;
> +__u32 cifs_lock_secret;
>
> /*
> * Bumps refcount for cifs super block.
> @@ -1271,6 +1272,8 @@ init_cifs(void)
> spin_lock_init(&cifs_file_list_lock);
> spin_lock_init(&GlobalMid_Lock);
>
> + get_random_bytes(&cifs_lock_secret,
> sizeof(cifs_lock_secret));
> +
> if (cifs_max_pending < 2) {
> cifs_max_pending = 2;
> cifs_dbg(FYI, "cifs_max_pending set to min of 2\n");
> diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
> index bba106cdc43c..8f1d8c1e72be 100644
> --- a/fs/cifs/cifsglob.h
> +++ b/fs/cifs/cifsglob.h
> @@ -1619,6 +1619,7 @@ void cifs_oplock_break(struct work_struct
> *work);
>
> extern const struct slow_work_ops cifs_oplock_break_ops;
> extern struct workqueue_struct *cifsiod_wq;
> +extern __u32 cifs_lock_secret;
>
> extern mempool_t *cifs_mid_poolp;
>
> diff --git a/fs/cifs/file.c b/fs/cifs/file.c
> index 9793ae0bcaa2..d4890b6dc22d 100644
> --- a/fs/cifs/file.c
> +++ b/fs/cifs/file.c
> @@ -1112,6 +1112,12 @@ cifs_push_mandatory_locks(struct cifsFileInfo
> *cfile)
> return rc;
> }
>
> +static __u32
> +hash_lockowner(fl_owner_t owner)
> +{
> + return cifs_lock_secret ^ hash32_ptr((const void *)owner);
> +}
> +
> struct lock_to_push {
> struct list_head llist;
> __u64 offset;
> @@ -1178,7 +1184,7 @@ cifs_push_posix_locks(struct cifsFileInfo
> *cfile)
> else
> type = CIFS_WRLCK;
> lck = list_entry(el, struct lock_to_push, llist);
> - lck->pid = flock->fl_pid;
> + lck->pid = hash_lockowner(flock->fl_owner);
> lck->netfid = cfile->fid.netfid;
> lck->length = length;
> lck->type = type;
> @@ -1305,7 +1311,8 @@ cifs_getlk(struct file *file, struct file_lock
> *flock, __u32 type,
> posix_lock_type = CIFS_RDLCK;
> else
> posix_lock_type = CIFS_WRLCK;
> - rc = CIFSSMBPosixLock(xid, tcon, netfid, current-
> >tgid,
> + rc = CIFSSMBPosixLock(xid, tcon, netfid,
> + hash_lockowner(flock-
> >fl_owner),
> flock->fl_start, length,
> flock,
> posix_lock_type, wait_flag);
> return rc;
> @@ -1505,7 +1512,8 @@ cifs_setlk(struct file *file, struct file_lock
> *flock, __u32 type,
> posix_lock_type = CIFS_UNLCK;
>
> rc = CIFSSMBPosixLock(xid, tcon, cfile->fid.netfid,
> - current->tgid, flock-
> >fl_start, length,
> + hash_lockowner(flock-
> >fl_owner),
> + flock->fl_start, length,
> NULL, posix_lock_type,
> wait_flag);
> goto out;
> }
prev parent reply other threads:[~2016-05-25 11:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-24 10:27 [PATCH] cifs: stuff the fl_owner into "pid" field in the lock request Jeff Layton
[not found] ` <1464085664-4391-1-git-send-email-jeff.layton-7I+n7zu2hftEKMMhf/gKZA@public.gmane.org>
2016-05-24 19:08 ` Pavel Shilovsky
2016-05-25 11:04 ` Sachin Prabhu [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1464174251.13286.1.camel@redhat.com \
--to=sprabhu-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=jlayton-vpEMnDpepFuMZCB2o+C8xQ@public.gmane.org \
--cc=linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=samba-technical-w/Ol4Ecudpl8XjKLYN78aQ@public.gmane.org \
--cc=smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).