cifs-load-gen (cifs_bm) failure-analysis improvements
Yuval Yeret
yuvaly at disksites.com
Wed Mar 8 14:36:44 GMT 2006
> -----Original Message-----
> From: Yuval Yeret
> Sent: Tuesday, February 07, 2006 2:05 PM
> To: Andrew Bartlett; samba-technical at lists.samba.org
> Subject: RE: cifs-load-gen (cifs_bm) failure-analysis improvements
>
>
>
> > -----Original Message-----
> > From: Andrew Bartlett [mailto:abartlet at samba.org]
> > Sent: Tuesday, February 07, 2006 1:33 PM
> > To: Yuval Yeret
> > Cc: samba-technical at lists.samba.org
> > Subject: Re: cifs-load-gen (cifs_bm) failure-analysis improvements
> >
> > On Tue, 2006-02-07 at 10:50 +0200, Yuval Yeret wrote:
> >
> > Your mail client seems to be munging on the patch. Could you resend
in
> > diff -u format, and check how to avoid it adding all the newlines?
> > (possibly send as an attachment?).
> Sending as diff -u attachment and trying to add it in the end without
> munging.
>
> > You should also exclude proto.h from the diff, as it is
autogenerated.
> Well, that is what I was used to in the samba source code, but it
appears
> the cifs-load-gen system is impaired, and proto.h there is static.
Anyhow,
> since the diff there can indeed be autogenerated from the nbio.c code,
it
> can be discarded.
>
> Yuval
>
>
>
>
> --- cifs-load-gen.orig/source/include/proto.h 2002-07-26
> 00:00:00.000000000 +0300
> +++ cifs-load-gen/source/include/proto.h 2006-02-07
13:58:38.000000000
> +0200
> @@ -277,22 +277,22 @@
> double nbio_total(void);
> void nb_alarm(int dummy);
> void nbio_shmem(int n);
> -void nb_setup(struct cli_state *cli);
> -void nb_unlink(char *fname);
> -void nb_createx(char *fname,
> +int nb_setup(struct cli_state *cli);
> +int nb_unlink(char *fname);
> +int nb_createx(char *fname,
> unsigned create_options, unsigned create_disposition,
int
> handle);
> -void nb_writex(int handle, int offset, int size, int ret_size);
> -void nb_readx(int handle, int offset, int size, int ret_size);
> -void nb_close(int handle);
> -void nb_rmdir(char *fname);
> -void nb_rename(char *old, char *new);
> -void nb_qpathinfo(char *fname);
> -void nb_qfileinfo(int fnum);
> -void nb_qfsinfo(int level);
> -void nb_findfirst(char *mask);
> -void nb_flush(int fnum);
> -void nb_deltree(char *dname);
> -void nb_cleanup(void);
> +int nb_writex(int handle, int offset, int size, int ret_size);
> +int nb_readx(int handle, int offset, int size, int ret_size);
> +int nb_close(int handle);
> +int nb_rmdir(char *fname);
> +int nb_rename(char *old, char *new);
> +int nb_qpathinfo(char *fname);
> +int nb_qfileinfo(int fnum);
> +int nb_qfsinfo(int level);
> +int nb_findfirst(char *mask);
> +int nb_flush(int fnum);
> +int nb_deltree(char *dname);
> +int nb_cleanup(void);
>
> /* The following definitions come from torture/nmblib.c */
>
> diff -r -u cifs-load-gen.orig/source/include/smb.h cifs-load-
> gen/source/include/smb.h
> --- cifs-load-gen.orig/source/include/smb.h 2003-04-17
> 00:00:00.000000000 +0300
> +++ cifs-load-gen/source/include/smb.h 2006-02-07
11:06:39.000000000
> +0200
> @@ -89,7 +89,7 @@
>
> #define EXIT(status) \
> { child_status[nbio_id] = -1; \
> - exit(status); }
> + return(status); }
>
> /* limiting size of ipc replies */
> #define REALLOC(ptr,size) Realloc(ptr,MAX((size),4*1024))
> diff -r -u cifs-load-gen.orig/source/torture/cifs_bm.c cifs-load-
> gen/source/torture/cifs_bm.c
> --- cifs-load-gen.orig/source/torture/cifs_bm.c 2003-05-12
> 00:00:00.000000000 +0300
> +++ cifs-load-gen/source/torture/cifs_bm.c 2006-02-07
> 11:06:39.000000000 +0200
> @@ -231,7 +231,7 @@
>
> static double create_procs(BOOL (*fn)(int), BOOL *result)
> {
> - int i, status, exited, syncing;
> + int i, status, exited, syncing, t;
> volatile BOOL *child_status_out;
> int synccount;
> int tries = 8;
> @@ -284,14 +284,19 @@
>
> sys_srandom(((int)mypid) ^ ((int)time(NULL)));
>
> - slprintf(myname,sizeof(myname),"CLIENT%d", i);
> + slprintf(myname,sizeof(myname),"CLIENT%d", i);
> +
> + t=sys_random() % 10;
> + fprintf(stderr, "%s - Sleeping for %d seconds\n", myname,
t);
> + sleep(t);
> +
>
> /*
> * Some setup ...
> */
>
> cmd_info = (struct cmd_struct *)(proc_cmd_info +
(i *
> (CMD_MAX_CMD + 1)));
> - fprintf(stderr, "child cmd_info: %0X\n",
cmd_info);
> + fprintf(stderr, "%s - child cmd_info: %0X\n",
myname,
> cmd_info);
> for (j = 0; j <= CMD_MAX_CMD; j++) {
>
> cmd_info[j].count = 0;
> @@ -417,6 +422,7 @@
> FILE *f;
> char *params[20];
> BOOL correct = True;
> + int st;
>
> cli = current_cli;
>
> @@ -435,7 +441,7 @@
> return False;
> }
>
> - while (fgets(line, sizeof(line)-1, f)) {
> + while (fgets(line, sizeof(line)-1, f) && st==0) {
> line_count++;
>
> line[strlen(line)-1] = 0;
> @@ -487,55 +493,62 @@
> }
> } else if (!strcmp(params[0],"NTCreateX")) {
> if (cmd_enabled[CMD_NTCREATEX])
> - nb_createx(params[1], ival(params[2]),
ival(params[3]),
> + st=nb_createx(params[1], ival(params[2]),
ival(params[3]),
> ival(params[4]));
> } else if (!strcmp(params[0],"Close")) {
> if (cmd_enabled[CMD_CLOSE])
> - nb_close(ival(params[1]));
> + st=nb_close(ival(params[1]));
> } else if (!strcmp(params[0],"Rename")) {
> if (cmd_enabled[CMD_RENAME])
> - nb_rename(params[1], params[2]);
> + st=nb_rename(params[1], params[2]);
> } else if (!strcmp(params[0],"Unlink")) {
> if (cmd_enabled[CMD_UNLINK])
> - nb_unlink(params[1]);
> + st=nb_unlink(params[1]);
> } else if (!strcmp(params[0],"Deltree")) {
> if (cmd_enabled[CMD_DELTREE])
> - nb_deltree(params[1]);
> + st=nb_deltree(params[1]);
> } else if (!strcmp(params[0],"Rmdir")) {
> if (cmd_enabled[CMD_RMDIR])
> - nb_rmdir(params[1]);
> + st=nb_rmdir(params[1]);
> } else if (!strcmp(params[0],"QUERY_PATH_INFORMATION"))
{
> if (cmd_enabled[CMD_QUERY_PATH_INFO])
> - nb_qpathinfo(params[1]);
> + st=nb_qpathinfo(params[1]);
> } else if (!strcmp(params[0],"QUERY_FILE_INFORMATION"))
{
> if (cmd_enabled[CMD_QUERY_FILE_INFO])
> - nb_qfileinfo(ival(params[1]));
> + st=nb_qfileinfo(ival(params[1]));
> } else if (!strcmp(params[0],"QUERY_FS_INFORMATION")) {
> if (cmd_enabled[CMD_QUERY_FS_INFO])
> - nb_qfsinfo(ival(params[1]));
> + st=nb_qfsinfo(ival(params[1]));
> } else if (!strcmp(params[0],"FIND_FIRST")) {
> if (cmd_enabled[CMD_FIND_FIRST])
> - nb_findfirst(params[1]);
> + st=nb_findfirst(params[1]);
> } else if (!strcmp(params[0],"WriteX")) {
> if (cmd_enabled[CMD_WRITEX])
> - nb_writex(ival(params[1]),
> + st=nb_writex(ival(params[1]),
> ival(params[2]), ival(params[3]),
> ival(params[4]));
> } else if (!strcmp(params[0],"ReadX")) {
> if (cmd_enabled[CMD_READX])
> - nb_readx(ival(params[1]),
> + st=nb_readx(ival(params[1]),
> ival(params[2]), ival(params[3]),
ival(params[4]));
> } else if (!strcmp(params[0],"Flush")) {
> if (cmd_enabled[CMD_FLUSH])
> - nb_flush(ival(params[1]));
> + st=nb_flush(ival(params[1]));
> } else if (!strcmp(params[0],"LockingX")) {
> if (cmd_enabled[CMD_LOCKINGX])
> - nb_lock(ival(params[1]), ival(params[2]),
> + st=nb_lock(ival(params[1]), ival(params[2]),
> ival(params[3]), ival(params[4]),
> ival(params[5]), ival(params[6]));
> } else {
> printf("Unknown operation %s\n", params[0]);
> exit(1);
> }
> +
> + if (st!=0) {
> + printf("%s: ERROR: process %ld aborting for %s on command
%s
> in line %ld\n",
> + timestring(0), getpid(), myname, line,
line_count);
> + exit(1);
> +
> + }
> }
> fclose(f);
>
> Only in cifs-load-gen.orig/source/torture: CVS
> diff -r -u cifs-load-gen.orig/source/torture/nbio.c cifs-load-
> gen/source/torture/nbio.c
> --- cifs-load-gen.orig/source/torture/nbio.c 2003-04-17
> 00:00:00.000000000 +0300
> +++ cifs-load-gen/source/torture/nbio.c 2006-02-07
11:06:39.000000000
> +0200
> @@ -161,16 +161,17 @@
> exit(1);
> }
>
> -void nb_setup(struct cli_state *cli)
> +int nb_setup(struct cli_state *cli)
> {
> signal(SIGSEGV, sigsegv);
> c = cli;
> start_timer();
> children[nbio_id].done = 0;
> + return(0);
> }
>
>
> -void nb_unlink(char *fname)
> +int nb_unlink(char *fname)
> {
> int cmd_time;
> BOOL status;
> @@ -189,10 +190,11 @@
> line_count, fname, cli_errstr(c));
> #endif
> }
> + return(0);
> }
>
>
> -void nb_createx(char *fname,
> +int nb_createx(char *fname,
> unsigned create_options, unsigned create_disposition,
int
> handle)
> {
> int fd, i;
> @@ -246,9 +248,10 @@
> if (ftable[i].name) free(ftable[i].name);
> ftable[i].name = strdup(path);
> ftable[i].reads = ftable[i].writes = 0;
> + return(0);
> }
>
> -void nb_writex(int handle, int offset, int size, int ret_size)
> +int nb_writex(int handle, int offset, int size, int ret_size)
> {
> int i, cmd_time;
> BOOL status;
> @@ -269,9 +272,10 @@
>
> children[nbio_id].bytes_out += ret_size;
> ftable[i].writes++;
> + return(0);
> }
>
> -void nb_lock(int handle, int offset, int size, int timeout, unsigned
char
> locktype, NTSTATUS exp)
> +int nb_lock(int handle, int offset, int size, int timeout, unsigned
char
> locktype, NTSTATUS exp)
> {
> int i, cmd_time;
> NTSTATUS ret;
> @@ -287,9 +291,10 @@
> printf("File: %s\n", ftable[i].name);
> if (error_exit) EXIT(1);
> }
> + return(0);
> }
>
> -void nb_readx(int handle, int offset, int size, int ret_size)
> +int nb_readx(int handle, int offset, int size, int ret_size)
> {
> int i, ret, cmd_time;
>
> @@ -306,9 +311,10 @@
> }
> children[nbio_id].bytes_in += ret_size;
> ftable[i].reads++;
> + return(0);
> }
>
> -void nb_close(int handle)
> +int nb_close(int handle)
> {
> int i, ret, cmd_time;
> i = find_handle(handle);
> @@ -326,9 +332,10 @@
> else
> children[nbio_id].wo_file_opens++;
> ftable[i].handle = 0;
> + return(0);
> }
>
> -void nb_rmdir(char *fname)
> +int nb_rmdir(char *fname)
> {
> int ret, cmd_time;
> pstring path;
> @@ -345,9 +352,10 @@
> fname, cli_errstr(c));
> if (error_exit) EXIT(1);
> }
> + return(0);
> }
>
> -void nb_rename(char *old, char *new)
> +int nb_rename(char *old, char *new)
> {
> int ret, cmd_time;
> pstring opath, npath;
> @@ -366,10 +374,11 @@
> old, new, cli_errstr(c));
> if (error_exit) EXIT(1);
> }
> + return(0);
> }
>
>
> -void nb_qpathinfo(char *fname)
> +int nb_qpathinfo(char *fname)
> {
> int cmd_time;
> pstring path;
> @@ -380,24 +389,27 @@
> start_cmd_timer();
> cli_qpathinfo(c, path, NULL, NULL, NULL, NULL, NULL);
> END_TIME(CMD_QUERY_PATH_INFO)
> + return(0);
> }
>
> -void nb_qfileinfo(int fnum)
> +int nb_qfileinfo(int fnum)
> {
> int i, cmd_time;
> i = find_handle(fnum);
> start_cmd_timer();
> cli_qfileinfo(c, ftable[i].fd, NULL, NULL, NULL, NULL, NULL,
NULL,
> NULL);
> END_TIME(CMD_QUERY_FILE_INFO)
> + return(0);
> }
>
> -void nb_qfsinfo(int level)
> +int nb_qfsinfo(int level)
> {
> int bsize, total, avail, cmd_time;
> /* this is not the right call - we need cli_qfsinfo() */
> start_cmd_timer();
> cli_dskattr(c, &bsize, &total, &avail);
> END_TIME(CMD_QUERY_FS_INFO)
> + return(0);
> }
>
> static void find_fn(file_info *finfo, const char *name, void *state)
> @@ -405,19 +417,21 @@
> /* noop */
> }
>
> -void nb_findfirst(char *mask)
> +int nb_findfirst(char *mask)
> {
> int cmd_time;
>
> start_cmd_timer();
> cli_list(c, mask, 0, find_fn, NULL);
> END_TIME(CMD_FIND_FIRST)
> + return(0);
> }
>
> -void nb_flush(int fnum)
> +int nb_flush(int fnum)
> {
> int i, cmd_time;
> i = find_handle(fnum);
> + return(0);
> /* hmmm, we don't have cli_flush() yet */
> }
>
> @@ -450,7 +464,7 @@
> free(n);
> }
>
> -void nb_deltree(char *dname)
> +int nb_deltree(char *dname)
> {
> char mask[1024];
> int cmd_time;
> @@ -468,11 +482,14 @@
> END_TIME(CMD_RMDIR)
>
> if (total_deleted) printf("WARNING: Cleaned up %d files\n",
> total_deleted);
> + return(0);
> }
>
>
> -void nb_cleanup(void)
> +int nb_cleanup(void)
> {
> cli_rmdir(c, "clients");
> children[nbio_id].done = 1;
> + return(0);
> +
> }
More information about the samba-technical
mailing list