1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

signed/unsigned fixes so we can handle a lock base close to 2^32

This commit is contained in:
Andrew Tridgell 0001-01-01 00:00:00 +00:00
parent df87259a35
commit 0ce2ca5ccd

View File

@ -33,11 +33,16 @@ static BOOL analyze;
#define FILENAME "locktest.dat"
#define LOCKRANGE 100
#define LOCKBASE 0
/*
#define LOCKBASE (0x40000000 - 50)
*/
#define READ_PCT 50
#define LOCK_PCT 25
#define UNLOCK_PCT 65
#define RANGE_MULTIPLE 32
#define RANGE_MULTIPLE 1
#define NCONNECTIONS 2
#define NFILES 2
#define LOCK_TIMEOUT 0
@ -48,19 +53,11 @@ static BOOL analyze;
struct record {
char r1, r2;
char conn, f;
int start, len;
unsigned start, len;
char needed;
};
static struct record preset[] = {
{77, 11, 0, 0, 2432, 480, 1},
{13, 11, 0, 0, 2624, 224, 1},
{16, 19, 0, 1, 448, 1344, 1},
{21, 96, 0, 0, 2144, 640, 1},
{53, 5, 1, 1, 2336, 608, 1},
{36, 5, 0, 0, 0, 8, 1},
{ 2, 6, 0, 1, 0, 1, 1},
{53, 92, 0, 0, 0, 0, 1},
@ -80,7 +77,7 @@ static void print_brl(SMB_DEV_T dev, SMB_INO_T ino, int pid,
if (lastino != ino) {
slprintf(cmd, sizeof(cmd),
"egrep POSIX.*%d /proc/locks", (int)ino);
"egrep POSIX.*%u /proc/locks", (int)ino);
system(cmd);
}
lastino = ino;
@ -118,7 +115,7 @@ struct cli_state *connect_one(char *share)
ip = ipzero;
slprintf(myname,sizeof(myname), "lock-%d-%d", getpid(), count++);
slprintf(myname,sizeof(myname), "lock-%u-%u", getpid(), count++);
make_nmb_name(&calling, myname, 0x0);
make_nmb_name(&called , server, 0x20);
@ -226,13 +223,13 @@ static BOOL test_one(struct cli_state *cli[2][2],
int fnum[2][2][2],
struct record *rec)
{
int conn = rec->conn;
int f = rec->f;
int start = rec->start;
int len = rec->len;
int r1 = rec->r1;
int r2 = rec->r2;
int op;
unsigned conn = rec->conn;
unsigned f = rec->f;
unsigned start = rec->start;
unsigned len = rec->len;
unsigned r1 = rec->r1;
unsigned r2 = rec->r2;
unsigned op;
BOOL ret1, ret2;
if (r1 < READ_PCT) {
@ -250,7 +247,7 @@ static BOOL test_one(struct cli_state *cli[2][2],
fnum[1][conn][f],
start, len, LOCK_TIMEOUT, op);
if (showall || ret1 != ret2) {
printf("lock conn=%d f=%d range=%d:%d(%d) op=%s -> %d:%d\n",
printf("lock conn=%u f=%u range=%u:%u(%u) op=%s -> %u:%u\n",
conn, f,
start, start+len-1, len,
op==READ_LOCK?"READ_LOCK":"WRITE_LOCK",
@ -267,7 +264,7 @@ static BOOL test_one(struct cli_state *cli[2][2],
fnum[1][conn][f],
start, len);
if (showall || ret1 != ret2) {
printf("unlock conn=%d f=%d range=%d:%d(%d) -> %d:%d\n",
printf("unlock conn=%u f=%u range=%u:%u(%u) -> %u:%u\n",
conn, f,
start, start+len-1, len,
ret1, ret2);
@ -293,7 +290,7 @@ static BOOL test_one(struct cli_state *cli[2][2],
return False;
}
if (showall) {
printf("reopen conn=%d f=%d\n",
printf("reopen conn=%u f=%u\n",
conn, f);
brl_forall(print_brl);
}
@ -302,7 +299,7 @@ static BOOL test_one(struct cli_state *cli[2][2],
}
static void close_files(struct cli_state *cli[2][2],
int fnum[2][2][2])
int fnum[2][2][2])
{
int server, conn, f;
@ -330,7 +327,7 @@ static void open_files(struct cli_state *cli[2][2],
O_RDWR|O_CREAT,
DENY_NONE);
if (fnum[server][conn][f] == -1) {
fprintf(stderr,"Failed to open fnum[%d][%d][%d]\n",
fprintf(stderr,"Failed to open fnum[%u][%u][%u]\n",
server, conn, f);
exit(1);
}
@ -343,10 +340,10 @@ static int retest(struct cli_state *cli[2][2],
int n)
{
int i;
printf("testing %d ...\n", n);
printf("testing %u ...\n", n);
for (i=0; i<n; i++) {
if (i && i % 100 == 0) {
printf("%d\n", i);
printf("%u\n", i);
}
if (recorded[i].needed &&
@ -379,8 +376,9 @@ static void test_locks(char *share1, char *share2)
} else {
recorded[n].conn = random() % NCONNECTIONS;
recorded[n].f = random() % NFILES;
recorded[n].start = random() % (LOCKRANGE-1);
recorded[n].len = 1 + random() % (LOCKRANGE-recorded[n].start);
recorded[n].start = LOCKBASE + ((unsigned)random() % (LOCKRANGE-1));
recorded[n].len = 1 +
random() % (LOCKRANGE-(recorded[n].start-LOCKBASE));
recorded[n].start *= RANGE_MULTIPLE;
recorded[n].len *= RANGE_MULTIPLE;
recorded[n].r1 = random() % 100;
@ -432,12 +430,12 @@ static void test_locks(char *share1, char *share2)
showall = True;
n1 = retest(cli, fnum, n);
if (n1 != n-1) {
printf("ERROR - inconsistent result (%d %d)\n", n1, n);
printf("ERROR - inconsistent result (%u %u)\n", n1, n);
}
close_files(cli, fnum);
for (i=0;i<n;i++) {
printf("{%d, %d, %d, %d, %d, %d, %d},\n",
printf("{%u, %u, %u, %u, %u, %u, %u},\n",
recorded[i].r1,
recorded[i].r2,
recorded[i].conn,
@ -544,7 +542,7 @@ static void usage(void)
argc -= optind;
argv += optind;
DEBUG(0,("seed=%d\n", seed));
DEBUG(0,("seed=%u\n", seed));
srandom(seed);
locking_init(1);