{
        unsigned long flags;
 
-       cfile->owner = current;
+       cfile->opener = get_pid(task_tgid(current));
        spin_lock_irqsave(&cd->file_lock, flags);
        list_add(&cfile->list, &cd->file_list);
        spin_unlock_irqrestore(&cd->file_lock, flags);
        spin_lock_irqsave(&cd->file_lock, flags);
        list_del(&cfile->list);
        spin_unlock_irqrestore(&cd->file_lock, flags);
+       put_pid(cfile->opener);
 
        return 0;
 }
        return files;
 }
 
-static int genwqe_force_sig(struct genwqe_dev *cd, int sig)
+static int genwqe_terminate(struct genwqe_dev *cd)
 {
        unsigned int files = 0;
        unsigned long flags;
 
        spin_lock_irqsave(&cd->file_lock, flags);
        list_for_each_entry(cfile, &cd->file_list, list) {
-               force_sig(sig, cfile->owner);
+               kill_pid(cfile->opener, SIGKILL, 1);
                files++;
        }
        spin_unlock_irqrestore(&cd->file_lock, flags);
                dev_warn(&pci_dev->dev,
                         "[%s] send SIGKILL and wait ...\n", __func__);
 
-               rc = genwqe_force_sig(cd, SIGKILL); /* force terminate */
+               rc = genwqe_terminate(cd);
                if (rc) {
                        /* Give kill_timout more seconds to end processes */
                        for (i = 0; (i < GENWQE_KILL_TIMEOUT) &&