size_t numpages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
        struct file *file;
        char name[13];
-       int id;
        vm_flags_t acctflag = 0;
 
        if (size < SHMMIN || size > ns->shm_ctlmax)
        shp->shm_file = file;
        shp->shm_creator = current;
 
-       id = ipc_addid(&shm_ids(ns), &shp->shm_perm, ns->shm_ctlmni);
-       if (id < 0) {
-               error = id;
+       error = ipc_addid(&shm_ids(ns), &shp->shm_perm, ns->shm_ctlmni);
+       if (error < 0)
                goto no_id;
-       }
 
        list_add(&shp->shm_clist, ¤t->sysvshm.shm_clist);
 
                user_shm_unlock(size, shp->mlock_user);
        fput(file);
 no_file:
-       ipc_rcu_putref(&shp->shm_perm, shm_rcu_free);
+       call_rcu(&shp->shm_perm.rcu, shm_rcu_free);
        return error;
 }