]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
scsi: cxlflash: Derive pid through accessors
authorMatthew R. Ochs <mrochs@linux.vnet.ibm.com>
Thu, 7 Dec 2017 17:20:55 +0000 (12:20 -0500)
committerStefan Bader <stefan.bader@canonical.com>
Wed, 14 Mar 2018 10:40:28 +0000 (11:40 +0100)
BugLink: http://bugs.launchpad.net/bugs/1730515
The cxlflash driver tracks process IDs alongside contexts to validate
context ownership. Currently, the process IDs are derived by directly
accessing values from the 'current' task pointer. While this method of
access is fine for the current process, it is incorrect when the parent
process ID is needed as the access requires serialization.

To address the incorrect issue and provide a consistent means of
deriving the process ID within the cxlflash driver, use the task
accessors defined linux/sched.h.

Signed-off-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
Signed-off-by: Uma Krishnan <ukrishn@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit d84c198f43c50c6c0bd57571acbf0f000165bd56)
Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com>
Acked-by: Colin Ian King <colin.king@canonical.com>
Acked-by: Seth Forshee <seth.forshee@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/scsi/cxlflash/superpipe.c

index ad0f9968ccfbffdbf8fa4d4e570a61dc896d04ff..13c0c4a1996792912d584e3f8f0fd70eca2d0165 100644 (file)
@@ -165,7 +165,7 @@ struct ctx_info *get_context(struct cxlflash_cfg *cfg, u64 rctxid,
        struct llun_info *lli = arg;
        u64 ctxid = DECODE_CTXID(rctxid);
        int rc;
-       pid_t pid = current->tgid, ctxpid = 0;
+       pid_t pid = task_tgid_nr(current), ctxpid = 0;
 
        if (ctx_ctrl & CTX_CTRL_FILE) {
                lli = NULL;
@@ -173,7 +173,7 @@ struct ctx_info *get_context(struct cxlflash_cfg *cfg, u64 rctxid,
        }
 
        if (ctx_ctrl & CTX_CTRL_CLONE)
-               pid = current->parent->tgid;
+               pid = task_ppid_nr(current);
 
        if (likely(ctxid < MAX_CONTEXT)) {
                while (true) {
@@ -824,7 +824,7 @@ static void init_context(struct ctx_info *ctxi, struct cxlflash_cfg *cfg,
        ctxi->rht_perms = perms;
        ctxi->ctrl_map = &afu->afu_map->ctrls[ctxid].ctrl;
        ctxi->ctxid = ENCODE_CTXID(ctxi, ctxid);
-       ctxi->pid = current->tgid; /* tgid = pid */
+       ctxi->pid = task_tgid_nr(current); /* tgid = pid */
        ctxi->ctx = ctx;
        ctxi->cfg = cfg;
        ctxi->file = file;