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 00000000000..4184079d043 --- /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 db92ee00ad1..3a7a592786c 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) |