diff options
Diffstat (limited to 'tests/bitrot/br-stub.c')
| -rw-r--r-- | tests/bitrot/br-stub.c | 304 | 
1 files changed, 153 insertions, 151 deletions
diff --git a/tests/bitrot/br-stub.c b/tests/bitrot/br-stub.c index 5b862832e77..1111f710f59 100644 --- a/tests/bitrot/br-stub.c +++ b/tests/bitrot/br-stub.c @@ -15,179 +15,181 @@  /* NOTE: no size discovery */  int -brstub_validate_version (char *bpath, unsigned long version) +brstub_validate_version(char *bpath, unsigned long version)  { -        int ret = 0; -        int match = 0; -        size_t xsize = 0; -        br_version_t *xv = NULL; - -        xsize = sizeof (br_version_t); - -        xv = calloc (1, xsize); -        if (!xv) { -                match = -1; -                goto err; -        } - -        ret = getxattr (bpath, "trusted.bit-rot.version", xv, xsize); -        if (ret < 0) { -                if (errno == ENODATA) -                        match = -2; -                goto err; -        } - -        if (xv->ongoingversion != version) { -                match = -3; -                fprintf (stderr, "ongoingversion: %lu\n", xv->ongoingversion); -        } -        free (xv); - - err: -        return match; +    int ret = 0; +    int match = 0; +    size_t xsize = 0; +    br_version_t *xv = NULL; + +    xsize = sizeof(br_version_t); + +    xv = calloc(1, xsize); +    if (!xv) { +        match = -1; +        goto err; +    } + +    ret = getxattr(bpath, "trusted.bit-rot.version", xv, xsize); +    if (ret < 0) { +        if (errno == ENODATA) +            match = -2; +        goto err; +    } + +    if (xv->ongoingversion != version) { +        match = -3; +        fprintf(stderr, "ongoingversion: %lu\n", xv->ongoingversion); +    } +    free(xv); + +err: +    return match;  }  int -brstub_write_validation (char *filp, char *bpath, unsigned long startversion) +brstub_write_validation(char *filp, char *bpath, unsigned long startversion)  { -        int fd1 = 0; -        int fd2 = 0; -        int ret = 0; -        char *string = "string\n"; - -        /* read only check */ -        fd1 = open (filp, O_RDONLY); -        if (fd1 < 0) -                goto err; -        close (fd1); - -        ret = brstub_validate_version (bpath, startversion); -        if (ret != -2) -                goto err; - -        /* single open (write/) check */ -        fd1 = open (filp, O_RDWR); -        if (fd1 < 0) -                goto err; - -        ret = write (fd1, string, strlen (string)); -        if (ret <= 0) -                goto err; -        /** -         * Fsync is done so that the write call has properly reached the -         * disk. For fuse mounts write-behind xlator would have held the -         * writes with itself and for nfs, client would have held the -         * write in its cache. So write fop would not have triggered the -         * versioning as it would have not reached the bit-rot-stub. -         */ -        fsync (fd1); -        ret = brstub_validate_version (bpath, startversion); -        if (ret != 0) -                goto err; -        ret = write (fd1, string, strlen (string)); -        if (ret <= 0) -                goto err; -        fsync (fd1); /* let it reach the disk */ - -        ret = brstub_validate_version (bpath, startversion); -        if (ret != 0) -                goto err; - -        close (fd1); - -        /** -         * Well, this is not a _real_ test per se . For this test to pass -         * the inode should not get a forget() in the interim. Therefore, -         * perform this test asap. -         */ - -        /* multi open (write/) check */ -        fd1 = open (filp, O_RDWR); -        if (fd1 < 0) -                goto err; -        fd2 = open (filp, O_WRONLY); -        if (fd1 < 0) -                goto err; - -        ret = write (fd1, string, strlen (string)); -        if (ret <= 0) -                goto err; - -        ret = write (fd2, string, strlen (string)); -        if (ret <= 0) -                goto err; - -        /* probably do a syncfs() */ -        fsync (fd1); -        fsync (fd2); - -        close (fd1); -        close (fd2); - -        /** -         * incremented once per write()/write().../close()/close() sequence -         */ -        ret = brstub_validate_version (bpath, startversion); -        if (ret != 0) -                goto err; - -        return 0; - - err: -        return -1; +    int fd1 = 0; +    int fd2 = 0; +    int ret = 0; +    char *string = "string\n"; + +    /* read only check */ +    fd1 = open(filp, O_RDONLY); +    if (fd1 < 0) +        goto err; +    close(fd1); + +    ret = brstub_validate_version(bpath, startversion); +    if (ret != -2) +        goto err; + +    /* single open (write/) check */ +    fd1 = open(filp, O_RDWR); +    if (fd1 < 0) +        goto err; + +    ret = write(fd1, string, strlen(string)); +    if (ret <= 0) +        goto err; +    /** +     * Fsync is done so that the write call has properly reached the +     * disk. For fuse mounts write-behind xlator would have held the +     * writes with itself and for nfs, client would have held the +     * write in its cache. So write fop would not have triggered the +     * versioning as it would have not reached the bit-rot-stub. +     */ +    fsync(fd1); +    ret = brstub_validate_version(bpath, startversion); +    if (ret != 0) +        goto err; +    ret = write(fd1, string, strlen(string)); +    if (ret <= 0) +        goto err; +    fsync(fd1); /* let it reach the disk */ + +    ret = brstub_validate_version(bpath, startversion); +    if (ret != 0) +        goto err; + +    close(fd1); + +    /** +     * Well, this is not a _real_ test per se . For this test to pass +     * the inode should not get a forget() in the interim. Therefore, +     * perform this test asap. +     */ + +    /* multi open (write/) check */ +    fd1 = open(filp, O_RDWR); +    if (fd1 < 0) +        goto err; +    fd2 = open(filp, O_WRONLY); +    if (fd1 < 0) +        goto err; + +    ret = write(fd1, string, strlen(string)); +    if (ret <= 0) +        goto err; + +    ret = write(fd2, string, strlen(string)); +    if (ret <= 0) +        goto err; + +    /* probably do a syncfs() */ +    fsync(fd1); +    fsync(fd2); + +    close(fd1); +    close(fd2); + +    /** +     * incremented once per write()/write().../close()/close() sequence +     */ +    ret = brstub_validate_version(bpath, startversion); +    if (ret != 0) +        goto err; + +    return 0; + +err: +    return -1;  }  int -brstub_new_object_validate (char *filp, char *brick) +brstub_new_object_validate(char *filp, char *brick)  { -        int ret = 0; -        char *fname = NULL; -        char bpath[PATH_MAX] = {0,}; +    int ret = 0; +    char *fname = NULL; +    char bpath[PATH_MAX] = { +        0, +    }; -        fname = basename (filp); -        if (!fname) -                goto err; +    fname = basename(filp); +    if (!fname) +        goto err; -        (void) snprintf (bpath, PATH_MAX, "%s/%s", brick, fname); +    (void)snprintf(bpath, PATH_MAX, "%s/%s", brick, fname); -        printf ("Validating initial version..\n"); -        ret = brstub_validate_version (bpath, 2); -        if (ret != -2) /* version _should_ be missing */ -                goto err; +    printf("Validating initial version..\n"); +    ret = brstub_validate_version(bpath, 2); +    if (ret != -2) /* version _should_ be missing */ +        goto err; -        printf ("Validating version on modifications..\n"); -        ret = brstub_write_validation (filp, bpath, 2); -        if (ret < 0) -                goto err; +    printf("Validating version on modifications..\n"); +    ret = brstub_write_validation(filp, bpath, 2); +    if (ret < 0) +        goto err; -        return 0; +    return 0; - err: -        return -1; +err: +    return -1;  }  int -main (int argc, char **argv) +main(int argc, char **argv)  { -        int ret = 0; -        char *filp = NULL; -        char *brick = NULL; +    int ret = 0; +    char *filp = NULL; +    char *brick = NULL; -        if (argc != 3) { -                printf ("Usage: %s <path> <brick>\n", argv[0]); -                goto err; -        } +    if (argc != 3) { +        printf("Usage: %s <path> <brick>\n", argv[0]); +        goto err; +    } -        filp = argv[1]; -        brick = argv[2]; +    filp = argv[1]; +    brick = argv[2]; -        printf ("Validating object version [%s]\n", filp); -        ret = brstub_new_object_validate (filp, brick); -        if (ret < 0) -                goto err; +    printf("Validating object version [%s]\n", filp); +    ret = brstub_new_object_validate(filp, brick); +    if (ret < 0) +        goto err; -        return 0; +    return 0; - err: -        return -1; +err: +    return -1;  }  | 
