Skip to content

Commit

Permalink
ipc,shm: cleanup do_shmat pasta
Browse files Browse the repository at this point in the history
Clean up some of the messy do_shmat() spaghetti code, getting rid of
out_free and out_put_dentry labels.  This makes shortening the critical
region of this function in the next patch a little easier to do and read.

Signed-off-by: Davidlohr Bueso <[email protected]>
Tested-by: Sedat Dilek <[email protected]>
Cc: Rik van Riel <[email protected]>
Cc: Manfred Spraul <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Davidlohr Bueso authored and torvalds committed Sep 11, 2013
1 parent 2caacaa commit f42569b
Showing 1 changed file with 12 additions and 14 deletions.
26 changes: 12 additions & 14 deletions ipc/shm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1108,16 +1108,21 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr,

err = -ENOMEM;
sfd = kzalloc(sizeof(*sfd), GFP_KERNEL);
if (!sfd)
goto out_put_dentry;
if (!sfd) {
path_put(&path);
goto out_nattch;
}

file = alloc_file(&path, f_mode,
is_file_hugepages(shp->shm_file) ?
&shm_file_operations_huge :
&shm_file_operations);
err = PTR_ERR(file);
if (IS_ERR(file))
goto out_free;
if (IS_ERR(file)) {
kfree(sfd);
path_put(&path);
goto out_nattch;
}

file->private_data = sfd;
file->f_mapping = shp->shm_file->f_mapping;
Expand All @@ -1143,7 +1148,7 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr,
addr > current->mm->start_stack - size - PAGE_SIZE * 5)
goto invalid;
}

addr = do_mmap_pgoff(file, addr, size, prot, flags, 0, &populate);
*raddr = addr;
err = 0;
Expand All @@ -1167,19 +1172,12 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr,
else
shm_unlock(shp);
up_write(&shm_ids(ns).rw_mutex);

out:
return err;

out_unlock:
shm_unlock(shp);
goto out;

out_free:
kfree(sfd);
out_put_dentry:
path_put(&path);
goto out_nattch;
out:
return err;
}

SYSCALL_DEFINE3(shmat, int, shmid, char __user *, shmaddr, int, shmflg)
Expand Down

0 comments on commit f42569b

Please sign in to comment.