[dbench @ tridge@samba.org-20070716021918-3kmmz3x2hzwccxam]
authorAndrew Tridgell <tridge@samba.org>
Mon, 16 Jul 2007 02:19:18 +0000 (12:19 +1000)
committerAndrew Tridgell <tridge@samba.org>
Mon, 16 Jul 2007 02:19:18 +0000 (12:19 +1000)
- no statics in backends
- fix tbench

dbench.c
dbench.h
fileio.c
proto.h
sockio.c
socklib.c

index 660286d7fb2a0a13ce57d2d19ba15d7723568613..6d34a7cf4a48a59a1efe7ef948f1816b7925a6d2 100644 (file)
--- a/dbench.c
+++ b/dbench.c
@@ -346,6 +346,10 @@ static int process_opts(int argc, const char **argv)
        
        options.nprocs = atoi(extra_argv[0]);
 
+       if (extra_argc >= 2) {
+               options.server = extra_argv[1];
+       }
+
        return 1;
 }
 
index e5bb877ada9e1a498fd7ec6e8bb3288c9edacd91..008e9e1d58f67f698def4d4a9de495e2be0c04cb 100644 (file)
--- a/dbench.h
+++ b/dbench.h
@@ -106,6 +106,7 @@ struct child_struct {
        struct timeval starttime;
        struct timeval lasttime;
        off_t bytes_since_fsync;
+       void *private;
 };
 
 struct options {
@@ -121,6 +122,7 @@ struct options {
        char *loadfile;
        double targetrate;
        int ea_enable;
+       const char *server;
 };
 
 /* CreateDisposition field. */
index b59a481f524e405965c1cc09cbee13936abaee7b..8d6616c2685d578bac2ca5f01782bb2b3aeebf7a 100644 (file)
--- a/fileio.c
+++ b/fileio.c
 
 #define MAX_FILES 200
 
-
-char *server = NULL;
-
-static struct {
+struct ftable {
        char *name;
        int fd;
        int handle;
-} ftable[MAX_FILES];
+};
 
 static int find_handle(struct child_struct *child, int handle)
 {
+       struct ftable *ftable = child->private;
        int i;
        for (i=0;i<MAX_FILES;i++) {
                if (ftable[i].handle == handle) return i;
@@ -191,7 +189,9 @@ static void failed(struct child_struct *child)
 
 void nb_setup(struct child_struct *child)
 {
-       (void)child;
+       struct ftable *ftable;
+       ftable = calloc(MAX_FILES, sizeof(struct ftable));
+       child->private = ftable;
 }
 
 void nb_unlink(struct child_struct *child, char *fname, int attr, const char *status)
@@ -235,6 +235,7 @@ void nb_createx(struct child_struct *child, const char *fname,
        int fd, i;
        int flags = O_RDWR;
        struct stat st;
+       struct ftable *ftable = (struct ftable *)child->private;
 
        resolve_name(fname);
 
@@ -299,6 +300,7 @@ void nb_writex(struct child_struct *child, int handle, int offset,
        int i = find_handle(child, handle);
        void *buf;
        struct stat st;
+       struct ftable *ftable = (struct ftable *)child->private;
 
        (void)status;
 
@@ -339,6 +341,7 @@ void nb_readx(struct child_struct *child, int handle, int offset,
 {
        int i = find_handle(child, handle);
        void *buf;
+       struct ftable *ftable = (struct ftable *)child->private;
 
        (void)status;
 
@@ -355,6 +358,7 @@ void nb_readx(struct child_struct *child, int handle, int offset,
 
 void nb_close(struct child_struct *child, int handle, const char *status)
 {
+       struct ftable *ftable = (struct ftable *)child->private;
        int i = find_handle(child, handle);
        (void)status;
        close(ftable[i].fd);
@@ -378,6 +382,7 @@ void nb_rename(struct child_struct *child, char *old, char *new, const char *sta
 
 void nb_flush(struct child_struct *child, int handle, const char *status)
 {
+       struct ftable *ftable = (struct ftable *)child->private;
        int i = find_handle(child, handle);
        (void)status;
        fsync(ftable[i].fd);
@@ -394,6 +399,7 @@ void nb_qpathinfo(struct child_struct *child, const char *fname, int level,
 
 void nb_qfileinfo(struct child_struct *child, int handle, int level, const char *status)
 {
+       struct ftable *ftable = (struct ftable *)child->private;
        struct stat st;
        int i = find_handle(child, handle);
        (void)child;
@@ -464,6 +470,7 @@ void nb_deltree(struct child_struct *child, char *dname)
 
 void nb_sfileinfo(struct child_struct *child, int handle, int level, const char *status)
 {
+       struct ftable *ftable = (struct ftable *)child->private;
        int i = find_handle(child, handle);
        struct utimbuf tm;
        struct stat st;
@@ -488,6 +495,7 @@ void nb_sfileinfo(struct child_struct *child, int handle, int level, const char
 void nb_lockx(struct child_struct *child, int handle, uint32_t offset, int size, 
              const char *status)
 {
+       struct ftable *ftable = (struct ftable *)child->private;
        int i = find_handle(child, handle);
        struct flock lock;
 
@@ -506,6 +514,7 @@ void nb_lockx(struct child_struct *child, int handle, uint32_t offset, int size,
 void nb_unlockx(struct child_struct *child,
                int handle, uint32_t offset, int size, const char *status)
 {
+       struct ftable *ftable = (struct ftable *)child->private;
        int i = find_handle(child, handle);
        struct flock lock;
 
diff --git a/proto.h b/proto.h
index 9fc3d50e8d53ff139a708043f0d18778e9a56e70..48f0d24acc7f310c28ebd4d10c685787a3f8bb4a 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -93,7 +93,7 @@ void nb_sleep(struct child_struct *child, int usec, const char *status);
 /* The following definitions come from socklib.c  */
 
 int open_socket_in(int type, int port);
-int open_socket_out(char *host, int port);
+int open_socket_out(const char *host, int port);
 void set_socket_options(int fd, char *options);
 int read_sock(int s, char *buf, int size);
 int write_sock(int s, char *buf, int size);
index c4aed74574235168ce62da10098bca19504424e9..6e5ddddd199e5f084b4de9fd2ae37570d7f2c4de 100644 (file)
--- a/sockio.c
+++ b/sockio.c
 
 #define MAX_FILES 1000
 
-static char buf[70000];
-
-char *server = "localhost";
-
-static int sock;
+struct sockio {
+       char buf[70000];
+       int sock;
+};
 
 /* emulate a single SMB packet exchange */
-static void do_packets(int send_size, int recv_size)
+static void do_packets(struct child_struct *child, int send_size, int recv_size)
 {
-       uint32 *ubuf = (uint32 *)buf;
+       struct sockio *sockio = (struct sockio *)child->private;
+       uint32 *ubuf = (uint32 *)sockio->buf;
 
        ubuf[0] = htonl(send_size-4);
        ubuf[1] = htonl(recv_size-4);
 
-       if (write_sock(sockbuf, send_size) != send_size) {
+       if (write_sock(sockio->sock, sockio->buf, send_size) != send_size) {
                printf("error writing %d bytes\n", (int)send_size);
                exit(1);
        }
 
-       if (read_sock(sockbuf, 4) != 4) {
+       if (read_sock(sockio->sock, sockio->buf, 4) != 4) {
                printf("error reading header\n");
                exit(1);
        }
@@ -51,7 +51,7 @@ static void do_packets(int send_size, int recv_size)
                exit(1);
        }
 
-       if (recv(sockbuf, recv_size-4, MSG_WAITALL|MSG_TRUNC) != 
+       if (recv(sockio->sock, sockio->buf, recv_size-4, MSG_WAITALL|MSG_TRUNC) != 
            recv_size-4) {
                printf("error reading %d bytes\n", (int)recv_size-4);
                exit(1);
@@ -66,14 +66,18 @@ static void do_packets(int send_size, int recv_size)
 
 void nb_setup(struct child_struct *child)
 {
-       sock = open_socket_out(server, TCP_PORT);
-       if (sock == -1) {
+       struct sockio *sockio;
+       sockio = calloc(1, sizeof(struct sockio));
+       child->private = sockio;
+       
+       sockio->sock = open_socket_out(options.server, TCP_PORT);
+       if (sockio->sock == -1) {
                printf("client %d failed to start\n", child->id);
                exit(1);
        }
-       set_socket_options(sock, options.tcp_options);
+       set_socket_options(sockio->sock, options.tcp_options);
 
-       do_packets(8, 8);
+       do_packets(child, 8, 8);
 }
 
 
@@ -82,21 +86,21 @@ void nb_unlink(struct child_struct *child, char *fname, int attr, const char *st
        (void)child;
        (void)attr;
        (void)status;
-        do_packets(39+2+strlen(fname)*2+2, 39);
+        do_packets(child, 39+2+strlen(fname)*2+2, 39);
 }
 
 void nb_mkdir(struct child_struct *child, char *dname, const char *status)
 {
        (void)child;
        (void)status;
-        do_packets(39+2+strlen(dname)*2+2, 39);
+        do_packets(child, 39+2+strlen(dname)*2+2, 39);
 }
 
 void nb_rmdir(struct child_struct *child, char *fname, const char *status)
 {
        (void)child;
        (void)status;
-        do_packets(39+2+strlen(fname)*2+2, 39);
+        do_packets(child, 39+2+strlen(fname)*2+2, 39);
 }
 
 void nb_createx(struct child_struct *child, const char *fname, 
@@ -108,7 +112,7 @@ void nb_createx(struct child_struct *child, const char *fname,
        (void)create_disposition;
        (void)fnum;
        (void)status;
-        do_packets(70+2+strlen(fname)*2+2, 39+12*4);
+        do_packets(child, 70+2+strlen(fname)*2+2, 39+12*4);
 }
 
 void nb_writex(struct child_struct *child, int handle, int offset, 
@@ -119,7 +123,7 @@ void nb_writex(struct child_struct *child, int handle, int offset,
        (void)offset;
        (void)ret_size;
        (void)status;
-        do_packets(39+20+size, 39+16);
+        do_packets(child, 39+20+size, 39+16);
        child->bytes += size;
 }
 
@@ -131,7 +135,7 @@ void nb_readx(struct child_struct *child, int handle, int offset,
        (void)offset;
        (void)size;
        (void)status;
-        do_packets(39+20, 39+20+ret_size);
+        do_packets(child, 39+20, 39+20+ret_size);
        child->bytes += ret_size;
 }
 
@@ -140,14 +144,14 @@ void nb_close(struct child_struct *child, int handle, const char *status)
        (void)child;
        (void)handle;
        (void)status;
-        do_packets(39+8, 39);
+        do_packets(child, 39+8, 39);
 }
 
 void nb_rename(struct child_struct *child, char *old, char *new, const char *status)
 {
        (void)child;
        (void)status;
-        do_packets(39+8+2*strlen(old)+2*strlen(new), 39);
+        do_packets(child, 39+8+2*strlen(old)+2*strlen(new), 39);
 }
 
 void nb_flush(struct child_struct *child, int handle, const char *status)
@@ -155,7 +159,7 @@ void nb_flush(struct child_struct *child, int handle, const char *status)
        (void)child;
        (void)handle;
        (void)status;
-        do_packets(39+2, 39);
+        do_packets(child, 39+2, 39);
 }
 
 void nb_qpathinfo(struct child_struct *child, const char *fname, int level, 
@@ -164,7 +168,7 @@ void nb_qpathinfo(struct child_struct *child, const char *fname, int level,
        (void)child;
        (void)level;
        (void)status;
-        do_packets(39+16+2*strlen(fname), 39+32);
+        do_packets(child, 39+16+2*strlen(fname), 39+32);
 }
 
 void nb_qfileinfo(struct child_struct *child, int handle, int level, const char *status)
@@ -173,7 +177,7 @@ void nb_qfileinfo(struct child_struct *child, int handle, int level, const char
        (void)level;
        (void)handle;
        (void)status;
-        do_packets(39+20, 39+32);
+        do_packets(child, 39+20, 39+32);
 }
 
 void nb_qfsinfo(struct child_struct *child, int level, const char *status)
@@ -181,7 +185,7 @@ void nb_qfsinfo(struct child_struct *child, int level, const char *status)
        (void)child;
        (void)level;
        (void)status;
-        do_packets(39+20, 39+32);
+        do_packets(child, 39+20, 39+32);
 }
 
 void nb_findfirst(struct child_struct *child, char *fname, int level, int maxcnt, 
@@ -191,7 +195,7 @@ void nb_findfirst(struct child_struct *child, char *fname, int level, int maxcnt
        (void)level;
        (void)maxcnt;
        (void)status;
-        do_packets(39+20+strlen(fname)*2, 39+90*count);
+        do_packets(child, 39+20+strlen(fname)*2, 39+90*count);
 }
 
 void nb_cleanup(struct child_struct *child)
@@ -211,7 +215,7 @@ void nb_sfileinfo(struct child_struct *child, int handle, int level, const char
        (void)handle;
        (void)level;
        (void)status;
-        do_packets(39+32, 39+8);
+        do_packets(child, 39+32, 39+8);
 }
 
 void nb_lockx(struct child_struct *child, int handle, uint32_t offset, int size, 
@@ -222,7 +226,7 @@ void nb_lockx(struct child_struct *child, int handle, uint32_t offset, int size,
        (void)offset;
        (void)size;
        (void)status;
-        do_packets(39+12, 39);
+        do_packets(child, 39+12, 39);
 }
 
 void nb_unlockx(struct child_struct *child,
@@ -233,7 +237,7 @@ void nb_unlockx(struct child_struct *child,
        (void)offset;
        (void)size;
        (void)status;
-        do_packets(39+12, 39);
+        do_packets(child, 39+12, 39);
 }
 
 void nb_sleep(struct child_struct *child, int usec, const char *status)
index aa82dbd2d7a3c82fa84703664cc06f280fa79266..06fb56bb8b2bdaed625367b83000c3390a05a621 100644 (file)
--- a/socklib.c
+++ b/socklib.c
@@ -52,7 +52,7 @@ int open_socket_in(int type, int port)
 
 /* open a socket to a tcp remote host with the specified port 
    based on code from Warren */
-int open_socket_out(char *host, int port)
+int open_socket_out(const char *host, int port)
 {
        int type = SOCK_STREAM;
        struct sockaddr_in sock_out;