ulong *raddr, unsigned long shmlba)
 {
        struct shmid_kernel *shp;
-       unsigned long addr;
+       unsigned long addr = (unsigned long)shmaddr;
        unsigned long size;
        struct file *file;
        int    err;
-       unsigned long flags;
+       unsigned long flags = MAP_SHARED;
        unsigned long prot;
        int acc_mode;
        struct ipc_namespace *ns;
        err = -EINVAL;
        if (shmid < 0)
                goto out;
-       else if ((addr = (ulong)shmaddr)) {
+
+       if (addr) {
                if (addr & (shmlba - 1)) {
                        /*
                         * Round down to the nearest multiple of shmlba.
 #endif
                                        goto out;
                }
-               flags = MAP_SHARED | MAP_FIXED;
-       } else {
-               if ((shmflg & SHM_REMAP))
-                       goto out;
 
-               flags = MAP_SHARED;
-       }
+               flags |= MAP_FIXED;
+       } else if ((shmflg & SHM_REMAP))
+               goto out;
 
        if (shmflg & SHM_RDONLY) {
                prot = PROT_READ;