linux/net/ceph/ceph_fs.c
<<
>>
Prefs
   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 */
  10int 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
  31int 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}
  59EXPORT_SYMBOL(ceph_flags_to_mode);
  60
  61int 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}
  78EXPORT_SYMBOL(ceph_caps_for_mode);
  79