Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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  */
11 {
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 
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 }
60 
62 {
63  int caps = CEPH_CAP_PIN;
64 
65  if (mode & CEPH_FILE_MODE_RD)
66  caps |= CEPH_CAP_FILE_SHARED |
68  if (mode & CEPH_FILE_MODE_WR)
69  caps |= CEPH_CAP_FILE_EXCL |
73  if (mode & CEPH_FILE_MODE_LAZY)
74  caps |= CEPH_CAP_FILE_LAZYIO;
75 
76  return caps;
77 }