d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * CDDL HEADER START
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * The contents of this file are subject to the terms of the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Common Development and Distribution License (the "License").
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * You may not use this file except in compliance with the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * or http://www.opensolaris.org/os/licensing.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * See the License for the specific language governing permissions
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * and limitations under the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * When distributing Covered Code, include this CDDL HEADER in each
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * If applicable, add the following below this CDDL HEADER, with the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * fields enclosed by brackets "[]" replaced with your own identifying
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * information: Portions Copyright [yyyy] [name of copyright owner]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * CDDL HEADER END
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Use is subject to license terms.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Copyright (c) 2012 by Delphix. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Assertion:
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Create two directory trees in zfs filesystem, and rename
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * directory across the directory structure. ZFS can handle
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * the race situation.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Need to create the following directory structures before
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * running this program:
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * mkdir -p 1/2/3/4/5 a/b/c/d/e
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#include <stdlib.h>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#include <unistd.h>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#include <stdio.h>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#include <strings.h>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyint
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedymain()
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy int i = 1;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy switch (fork()) {
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy case -1:
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy perror("fork");
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy exit(1);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy break;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy case 0:
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while (i > 0) {
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy int c_count = 0;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (rename("a/b/c", "1/2/3/c") == 0)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy c_count++;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (rename("1/2/3/c", "a/b/c") == 0)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy c_count++;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (c_count) {
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (void) fprintf(stderr, "c_count: %d", c_count);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy }
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy }
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy break;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy default:
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while (i > 0) {
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy int p_count = 0;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (rename("1", "a/b/c/d/e/1") == 0)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy p_count++;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (rename("a/b/c/d/e/1", "1") == 0)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy p_count++;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (p_count) {
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (void) fprintf(stderr, "p_count: %d", p_count);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy }
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy }
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy break;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy }
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return (0);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}