X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fllite%2Ffile.c;h=8e5f24016ccf34afc09a0999769b1e500d539b59;hp=5a54c94915e50cc07dc671b22ca58812f4ad8c22;hb=3bb8d1b9656994b0313cdba6ad8eeb7b84f5ee9f;hpb=1d0bf2a777010fcc3316be061d7e26367c36f475 diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 5a54c94..8e5f240 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -1988,7 +1988,7 @@ int ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock) .ei_cbdata = file_lock }; struct md_op_data *op_data; struct lustre_handle lockh = {0}; - ldlm_policy_data_t flock; + ldlm_policy_data_t flock = {{0}}; int flags = 0; int rc; ENTRY; @@ -2000,13 +2000,18 @@ int ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock) if (file_lock->fl_flags & FL_FLOCK) { LASSERT((cmd == F_SETLKW) || (cmd == F_SETLK)); - /* set missing params for flock() calls */ - file_lock->fl_end = OFFSET_MAX; - file_lock->fl_pid = current->tgid; + /* flocks are whole-file locks */ + flock.l_flock.end = OFFSET_MAX; + /* For flocks owner is determined by the local file desctiptor*/ + flock.l_flock.owner = (unsigned long)file_lock->fl_file; + } else if (file_lock->fl_flags & FL_POSIX) { + flock.l_flock.owner = (unsigned long)file_lock->fl_owner; + flock.l_flock.start = file_lock->fl_start; + flock.l_flock.end = file_lock->fl_end; + } else { + RETURN(-EINVAL); } flock.l_flock.pid = file_lock->fl_pid; - flock.l_flock.start = file_lock->fl_start; - flock.l_flock.end = file_lock->fl_end; switch (file_lock->fl_type) { case F_RDLCK: