diff options
| -rw-r--r-- | extras/test/open-fd-tests.c | 64 | ||||
| -rw-r--r-- | libglusterfs/src/fd.c | 8 | 
2 files changed, 67 insertions, 5 deletions
diff --git a/extras/test/open-fd-tests.c b/extras/test/open-fd-tests.c new file mode 100644 index 000000000..4184079d0 --- /dev/null +++ b/extras/test/open-fd-tests.c @@ -0,0 +1,64 @@ + +#include <stdio.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <attr/xattr.h> +#include <errno.h> +#include <string.h> + +int +main (int argc, char *argv[]) +{ +        int          ret      = -1; +        int          fd       = 0; +        char        *filename = NULL; +        int          loop     = 0; +        struct stat  stbuf    = {0,}; +        char         string[1024] = {0,}; + +        if (argc > 1) +                filename = argv[1]; + +        if (!filename) +                filename = "temp-fd-test-file"; + +        fd = open (filename, O_RDWR|O_CREAT|O_TRUNC); +        if (fd < 0) { +                fd = 0; +                fprintf (stderr, "open failed : %s\n", strerror (errno)); +                goto out; +        } + +        while (loop < 1000) { +                /* Use it as a mechanism to test time delays */ +                memset (string, 0, 1024); +                scanf ("%s", string); + +                ret = write (fd, string, strlen (string)); +                if (ret != strlen (string)) { +                        fprintf (stderr, "write failed : %s (%s %d)\n", +                                 strerror (errno), string, loop); +                        goto out; +                } + +                ret = write (fd, "\n", 1); +                if (ret != 1) { +                        fprintf (stderr, "write failed : %s (%d)\n", +                                 strerror (errno), loop); +                        goto out; +                } + +                loop++; +        } + +        fprintf (stdout, "finishing the test after %d loops\n", loop); + +        ret = 0; +out: +        if (fd) +                close (fd); + +        return ret; +} diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c index db92ee00a..3a7a59278 100644 --- a/libglusterfs/src/fd.c +++ b/libglusterfs/src/fd.c @@ -1030,15 +1030,13 @@ fd_ctx_dump (fd_t *fd, char *prefix)          LOCK (&fd->lock);          {                  if (fd->_ctx != NULL) { -                        fd_ctx = GF_CALLOC (fd->inode->table->xl->graph->xl_count, -                                            sizeof (*fd_ctx), +                        fd_ctx = GF_CALLOC (fd->xl_count, sizeof (*fd_ctx),                                              gf_common_mt_fd_ctx);                          if (fd_ctx == NULL) {                                  goto unlock;                          } -                        for (i = 0; i < fd->inode->table->xl->graph->xl_count; -                             i++) { +                        for (i = 0; i < fd->xl_count; i++) {                                  fd_ctx[i] = fd->_ctx[i];                          }                  } @@ -1050,7 +1048,7 @@ unlock:                  goto out;          } -        for (i = 0; i < fd->inode->table->xl->graph->xl_count; i++) { +        for (i = 0; i < fd->xl_count; i++) {                  if (fd_ctx[i].xl_key) {                          xl = (xlator_t *)(long)fd_ctx[i].xl_key;                          if (xl->dumpops && xl->dumpops->fdctx)  | 
