Eliminate do_unlock as it's just cut-and-paste of do_lock (down to the bad stderr fprintf). Fix the debug messages to print the cmd and type, and add the ability to do a WRTEST and RDTEST. Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxxxxxxx> --- src/locktest.c | 61 ++++++++++++++++++++++------------------------------------ 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/src/locktest.c b/src/locktest.c index 0a674a7ff5c2..c9cd04ca4a59 100644 --- a/src/locktest.c +++ b/src/locktest.c @@ -110,6 +110,8 @@ static int D_flag = 0; #define UNLOCK 2 #define F_CLOSE 3 #define F_OPEN 4 +#define WRTEST 5 +#define RDTEST 6 #define PASS 1 #define FAIL 0 @@ -629,14 +631,14 @@ int do_open(int flag) return PASS; } -int do_lock(int type, int start, int length) +static int do_lock(int cmd, int type, int start, int length) { int ret; int filedes = f_fd; struct flock fl; if(debug > 1) { - fprintf(stderr, "do_lock: start=%d, length=%d\n", start, length); + fprintf(stderr, "do_lock: cmd=%d type=%d start=%d, length=%d\n", cmd, type, start, length); } if (f_fd < 0) @@ -650,7 +652,7 @@ int do_lock(int type, int start, int length) errno = 0; - ret = fcntl(filedes, F_SETLK, &fl); + ret = fcntl(filedes, cmd, &fl); saved_errno = errno; if(debug > 1 && ret) @@ -659,35 +661,6 @@ int do_lock(int type, int start, int length) return(ret==0?PASS:FAIL); } -int do_unlock(int start, int length) -{ - int ret; - int filedes = f_fd; - struct flock fl; - - if(debug > 1) { - fprintf(stderr, "do_unlock: start=%d, length=%d\n", start, length); - } - - if (f_fd < 0) - return f_fd; - - fl.l_start = start; - fl.l_len = length; - fl.l_whence = SEEK_SET; - fl.l_pid = getpid(); - fl.l_type = F_UNLCK; - - errno = 0; - - ret = fcntl(filedes, F_SETLK, &fl); - saved_errno = errno; - if(debug > 1 && ret) - fprintf(stderr, "do_lock: ret = %d, errno = %d (%s)\n", ret, errno, strerror(errno)); - - return(ret==0?PASS:FAIL); -} - int do_close(void) { if(debug > 1) { @@ -1016,13 +989,13 @@ main(int argc, char *argv[]) if(tests[index][TEST_NUM] != 0) { switch(tests[index][COMMAND]) { case WRLOCK: - result = do_lock(F_WRLCK, tests[index][OFFSET], tests[index][LENGTH]); + result = do_lock(F_SETLK, F_WRLCK, tests[index][OFFSET], tests[index][LENGTH]); break; case RDLOCK: - result = do_lock(F_RDLCK, tests[index][OFFSET], tests[index][LENGTH]); + result = do_lock(F_SETLK, F_RDLCK, tests[index][OFFSET], tests[index][LENGTH]); break; case UNLOCK: - result = do_unlock(tests[index][OFFSET], tests[index][LENGTH]); + result = do_lock(F_SETLK, F_UNLCK, tests[index][OFFSET], tests[index][LENGTH]); break; case F_CLOSE: result = do_close(); @@ -1030,6 +1003,12 @@ main(int argc, char *argv[]) case F_OPEN: result = do_open(tests[index][FLAGS]); break; + case WRTEST: + result = do_lock(F_GETLK, F_WRLCK, tests[index][OFFSET], tests[index][LENGTH]); + break; + case RDTEST: + result = do_lock(F_GETLK, F_RDLCK, tests[index][OFFSET], tests[index][LENGTH]); + break; } if( result != tests[index][RESULT]) { fail_flag++; @@ -1126,13 +1105,13 @@ main(int argc, char *argv[]) ctl.length = tests[index][LENGTH]; switch(tests[index][COMMAND]) { case WRLOCK: - result = do_lock(F_WRLCK, tests[index][OFFSET], tests[index][LENGTH]); + result = do_lock(F_SETLK, F_WRLCK, tests[index][OFFSET], tests[index][LENGTH]); break; case RDLOCK: - result = do_lock(F_RDLCK, tests[index][OFFSET], tests[index][LENGTH]); + result = do_lock(F_SETLK, F_RDLCK, tests[index][OFFSET], tests[index][LENGTH]); break; case UNLOCK: - result = do_unlock(tests[index][OFFSET], tests[index][LENGTH]); + result = do_lock(F_SETLK, F_UNLCK, tests[index][OFFSET], tests[index][LENGTH]); break; case F_CLOSE: result = do_close(); @@ -1140,6 +1119,12 @@ main(int argc, char *argv[]) case F_OPEN: result = do_open(tests[index][FLAGS]); break; + case WRTEST: + result = do_lock(F_GETLK, F_WRLCK, tests[index][OFFSET], tests[index][LENGTH]); + break; + case RDTEST: + result = do_lock(F_GETLK, F_RDLCK, tests[index][OFFSET], tests[index][LENGTH]); + break; } if( result != tests[index][RESULT] ) { if(debug) -- 1.9.0 _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs