glusterfs

Форк
0
77 строк · 2.1 Кб
1
/*
2
   Copyright (c) 2006-2012 Red Hat, Inc. <http://www.redhat.com>
3
   This file is part of GlusterFS.
4

5
   This file is licensed to you under your choice of the GNU Lesser
6
   General Public License, version 3 or any later version (LGPLv3 or
7
   later), or the GNU General Public License, version 2 (GPLv2), in all
8
   cases as published by the Free Software Foundation.
9
*/
10
#include <glusterfs/glusterfs.h>
11
#include <glusterfs/compat.h>
12
#include <glusterfs/xlator.h>
13
#include <glusterfs/logging.h>
14
#include <glusterfs/common-utils.h>
15
#include <glusterfs/list.h>
16

17
#include "locks.h"
18
#include "common.h"
19

20
#define expect(cond)                                                           \
21
    if (!(cond)) {                                                             \
22
        goto out;                                                              \
23
    }
24

25
extern int
26
lock_name(pl_inode_t *, const char *, entrylk_type);
27
extern int
28
unlock_name(pl_inode_t *, const char *, entrylk_type);
29

30
int
31
main(int argc, char **argv)
32
{
33
    int ret = 1;
34
    int r = -1;
35

36
    pl_inode_t *pinode = CALLOC(sizeof(pl_inode_t), 1);
37
    pthread_mutex_init(&pinode->dir_lock_mutex, NULL);
38
    INIT_LIST_HEAD(&pinode->gf_dir_locks);
39

40
    r = lock_name(pinode, NULL, ENTRYLK_WRLCK);
41
    expect(r == 0);
42
    {
43
        r = lock_name(pinode, "foo", ENTRYLK_WRLCK);
44
        expect(r == -EAGAIN);
45
    }
46
    r = unlock_name(pinode, NULL, ENTRYLK_WRLCK);
47
    expect(r == 0);
48

49
    r = lock_name(pinode, "foo", ENTRYLK_RDLCK);
50
    expect(r == 0);
51
    {
52
        r = lock_name(pinode, "foo", ENTRYLK_RDLCK);
53
        expect(r == 0);
54
        {
55
            r = lock_name(pinode, "foo", ENTRYLK_WRLCK);
56
            expect(r == -EAGAIN);
57
        }
58
        r = unlock_name(pinode, "foo", ENTRYLK_RDLCK);
59
        expect(r == 0);
60
    }
61
    r = unlock_name(pinode, "foo", ENTRYLK_RDLCK);
62
    expect(r == 0);
63

64
    r = lock_name(pinode, "foo", ENTRYLK_WRLCK);
65
    expect(r == 0);
66
    r = unlock_name(pinode, "foo", ENTRYLK_WRLCK);
67
    expect(r == 0);
68

69
    r = lock_name(pinode, "baz", ENTRYLK_WRLCK);
70
    expect(r == 0);
71
    r = lock_name(pinode, "baz", ENTRYLK_RDLCK);
72
    expect(r == -EAGAIN);
73

74
    ret = 0;
75
out:
76
    return ret;
77
}
78

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.