/* Unshare file descriptor table if it is being shared  */
static int unshare_fd(unsigned long unshare_flags, struct files_struct **new_fdp)
/* Unshare file descriptor table if it is being shared  */
static int unshare_fd(unsigned long unshare_flags, struct files_struct **new_fdp)
{
	struct files_struct *fd = current->files;
	int error = 0;
	if ((unshare_flags & CLONE_FILES) &&
	    (fd && atomic_read(&fd->count) > 1)) {
		*new_fdp = dup_fd(fd, &error);
		if (!*new_fdp)
			return error;
	}
	return 0;
}