[Ocfs2-test-devel] [PATCH 2/2] Ocfs2-test: Add semaphore to protect file_writes and log_writes.
Tristan
tristan.ye at oracle.com
Wed Dec 2 22:58:23 PST 2009
Tao Ma wrote:
>
>
> Tristan Ye wrote:
>> File writes and log writes together should be finished like a
>> transaction,
>> we therefore use sem to guarantee the atomicity of such ops.
>>
>> Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
>> ---
>> programs/reflink_tests/reflink_test.c | 33 ++++++++++++++-
>> programs/reflink_tests/reflink_test.h | 15 +++++++
>> programs/reflink_tests/reflink_test_utils.c | 57
>> +++++++++++++++++++++++++++
>> 3 files changed, 102 insertions(+), 3 deletions(-)
>>
>> diff --git a/programs/reflink_tests/reflink_test.c
>> b/programs/reflink_tests/reflink_test.c
>> index 41bd544..a235382 100755
>> --- a/programs/reflink_tests/reflink_test.c
>> +++ b/programs/reflink_tests/reflink_test.c
>> @@ -1807,6 +1807,23 @@ static int destructive_test(void)
>>
>> pid_t pid;
>>
>> + int sem_id;
>> + key_t sem_key = IPC_PRIVATE;
>> +
>> + /*get and init semaphore*/
>> + sem_id = semget(sem_key, 1, 0766 | IPC_CREAT);
>> + if (sem_id < 0) {
>> + sem_id = errno;
>> + fprintf(stderr, "semget failed, %s.\n", strerror(sem_id));
>> + return -1;
>> + }
>> +
>> + ret = set_semvalue(sem_id);
>> + if (ret < 0) {
>> + fprintf(stderr, "Set semaphore value failed!\n");
>> + return ret;
>> + }
>> +
>> while (align_filesz < file_size)
>> align_filesz += CHUNK_SIZE;
>>
>> @@ -1884,24 +1901,31 @@ static int destructive_test(void)
>> dwu.d_timestamp, dwu.d_checksum,
>> dwu.d_char);
>>
>> + if (semaphore_p(sem_id) < 0)
>> + exit(-1);
>> ret = do_write_chunk(fd, &dwu);
>> if (ret)
>> return -1;
> if we add sem, here we may need to go to the semaphore_close below I
> guess? The same goes with other returns.
Yes, should goto a bail place to close the socks,fds and sems. good point.
Tirstan.
>
> Regards,
> Tao
More information about the Ocfs2-test-devel
mailing list