}
 }
 
-static int nlm_unlock_files(struct nlm_file *file, fl_owner_t owner)
+static int nlm_unlock_files(struct nlm_file *file, const struct file_lock *fl)
 {
        struct file_lock lock;
 
        lock.fl_type  = F_UNLCK;
        lock.fl_start = 0;
        lock.fl_end   = OFFSET_MAX;
-       lock.fl_owner = owner;
-       if (file->f_file[O_RDONLY] &&
-           vfs_lock_file(file->f_file[O_RDONLY], F_SETLK, &lock, NULL))
+       lock.fl_owner = fl->fl_owner;
+       lock.fl_pid   = fl->fl_pid;
+       lock.fl_flags = FL_POSIX;
+
+       lock.fl_file = file->f_file[O_RDONLY];
+       if (lock.fl_file && vfs_lock_file(lock.fl_file, F_SETLK, &lock, NULL))
                goto out_err;
-       if (file->f_file[O_WRONLY] &&
-           vfs_lock_file(file->f_file[O_WRONLY], F_SETLK, &lock, NULL))
+       lock.fl_file = file->f_file[O_WRONLY];
+       if (lock.fl_file && vfs_lock_file(lock.fl_file, F_SETLK, &lock, NULL))
                goto out_err;
        return 0;
 out_err:
                if (match(lockhost, host)) {
 
                        spin_unlock(&flctx->flc_lock);
-                       if (nlm_unlock_files(file, fl->fl_owner))
+                       if (nlm_unlock_files(file, fl))
                                return 1;
                        goto again;
                }