Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
net
ceph
ceph_fs.c
Go to the documentation of this file.
1
/*
2
* Some non-inline ceph helpers
3
*/
4
#include <linux/module.h>
5
#include <
linux/ceph/types.h
>
6
7
/*
8
* return true if @layout appears to be valid
9
*/
10
int
ceph_file_layout_is_valid
(
const
struct
ceph_file_layout
*
layout
)
11
{
12
__u32
su
=
le32_to_cpu
(layout->
fl_stripe_unit
);
13
__u32
sc
=
le32_to_cpu
(layout->
fl_stripe_count
);
14
__u32
os
=
le32_to_cpu
(layout->
fl_object_size
);
15
16
/* stripe unit, object size must be non-zero, 64k increment */
17
if
(!su || (su & (
CEPH_MIN_STRIPE_UNIT
-1)))
18
return
0;
19
if
(!os || (os & (
CEPH_MIN_STRIPE_UNIT
-1)))
20
return
0;
21
/* object size must be a multiple of stripe unit */
22
if
(os < su || os % su)
23
return
0;
24
/* stripe count must be non-zero */
25
if
(!sc)
26
return
0;
27
return
1;
28
}
29
30
31
int
ceph_flags_to_mode
(
int
flags
)
32
{
33
int
mode
;
34
35
#ifdef O_DIRECTORY
/* fixme */
36
if
((flags &
O_DIRECTORY
) == O_DIRECTORY)
37
return
CEPH_FILE_MODE_PIN
;
38
#endif
39
40
switch
(flags &
O_ACCMODE
) {
41
case
O_WRONLY
:
42
mode =
CEPH_FILE_MODE_WR
;
43
break
;
44
case
O_RDONLY
:
45
mode =
CEPH_FILE_MODE_RD
;
46
break
;
47
case
O_RDWR
:
48
case
O_ACCMODE:
/* this is what the VFS does */
49
mode =
CEPH_FILE_MODE_RDWR
;
50
break
;
51
}
52
#ifdef O_LAZY
53
if
(flags & O_LAZY)
54
mode |=
CEPH_FILE_MODE_LAZY
;
55
#endif
56
57
return
mode
;
58
}
59
EXPORT_SYMBOL
(
ceph_flags_to_mode
);
60
61
int
ceph_caps_for_mode
(
int
mode
)
62
{
63
int
caps
=
CEPH_CAP_PIN
;
64
65
if
(mode &
CEPH_FILE_MODE_RD
)
66
caps |=
CEPH_CAP_FILE_SHARED
|
67
CEPH_CAP_FILE_RD
|
CEPH_CAP_FILE_CACHE
;
68
if
(mode &
CEPH_FILE_MODE_WR
)
69
caps |=
CEPH_CAP_FILE_EXCL
|
70
CEPH_CAP_FILE_WR
|
CEPH_CAP_FILE_BUFFER
|
71
CEPH_CAP_AUTH_SHARED
|
CEPH_CAP_AUTH_EXCL
|
72
CEPH_CAP_XATTR_SHARED
|
CEPH_CAP_XATTR_EXCL
;
73
if
(mode &
CEPH_FILE_MODE_LAZY
)
74
caps |=
CEPH_CAP_FILE_LAZYIO
;
75
76
return
caps
;
77
}
78
EXPORT_SYMBOL
(
ceph_caps_for_mode
);
Generated on Thu Jan 10 2013 14:57:23 for Linux Kernel by
1.8.2