root/net/ceph/ceph_fs.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ceph_file_layout_is_valid
  2. ceph_file_layout_from_legacy
  3. ceph_file_layout_to_legacy
  4. ceph_flags_to_mode
  5. ceph_caps_for_mode

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * Some non-inline ceph helpers
   4  */
   5 #include <linux/module.h>
   6 #include <linux/ceph/types.h>
   7 
   8 /*
   9  * return true if @layout appears to be valid
  10  */
  11 int ceph_file_layout_is_valid(const struct ceph_file_layout *layout)
  12 {
  13         __u32 su = layout->stripe_unit;
  14         __u32 sc = layout->stripe_count;
  15         __u32 os = layout->object_size;
  16 
  17         /* stripe unit, object size must be non-zero, 64k increment */
  18         if (!su || (su & (CEPH_MIN_STRIPE_UNIT-1)))
  19                 return 0;
  20         if (!os || (os & (CEPH_MIN_STRIPE_UNIT-1)))
  21                 return 0;
  22         /* object size must be a multiple of stripe unit */
  23         if (os < su || os % su)
  24                 return 0;
  25         /* stripe count must be non-zero */
  26         if (!sc)
  27                 return 0;
  28         return 1;
  29 }
  30 
  31 void ceph_file_layout_from_legacy(struct ceph_file_layout *fl,
  32                                   struct ceph_file_layout_legacy *legacy)
  33 {
  34         fl->stripe_unit = le32_to_cpu(legacy->fl_stripe_unit);
  35         fl->stripe_count = le32_to_cpu(legacy->fl_stripe_count);
  36         fl->object_size = le32_to_cpu(legacy->fl_object_size);
  37         fl->pool_id = le32_to_cpu(legacy->fl_pg_pool);
  38         if (fl->pool_id == 0 && fl->stripe_unit == 0 &&
  39             fl->stripe_count == 0 && fl->object_size == 0)
  40                 fl->pool_id = -1;
  41 }
  42 EXPORT_SYMBOL(ceph_file_layout_from_legacy);
  43 
  44 void ceph_file_layout_to_legacy(struct ceph_file_layout *fl,
  45                                 struct ceph_file_layout_legacy *legacy)
  46 {
  47         legacy->fl_stripe_unit = cpu_to_le32(fl->stripe_unit);
  48         legacy->fl_stripe_count = cpu_to_le32(fl->stripe_count);
  49         legacy->fl_object_size = cpu_to_le32(fl->object_size);
  50         if (fl->pool_id >= 0)
  51                 legacy->fl_pg_pool = cpu_to_le32(fl->pool_id);
  52         else
  53                 legacy->fl_pg_pool = 0;
  54 }
  55 EXPORT_SYMBOL(ceph_file_layout_to_legacy);
  56 
  57 int ceph_flags_to_mode(int flags)
  58 {
  59         int mode;
  60 
  61 #ifdef O_DIRECTORY  /* fixme */
  62         if ((flags & O_DIRECTORY) == O_DIRECTORY)
  63                 return CEPH_FILE_MODE_PIN;
  64 #endif
  65 
  66         switch (flags & O_ACCMODE) {
  67         case O_WRONLY:
  68                 mode = CEPH_FILE_MODE_WR;
  69                 break;
  70         case O_RDONLY:
  71                 mode = CEPH_FILE_MODE_RD;
  72                 break;
  73         case O_RDWR:
  74         case O_ACCMODE: /* this is what the VFS does */
  75                 mode = CEPH_FILE_MODE_RDWR;
  76                 break;
  77         }
  78 #ifdef O_LAZY
  79         if (flags & O_LAZY)
  80                 mode |= CEPH_FILE_MODE_LAZY;
  81 #endif
  82 
  83         return mode;
  84 }
  85 EXPORT_SYMBOL(ceph_flags_to_mode);
  86 
  87 int ceph_caps_for_mode(int mode)
  88 {
  89         int caps = CEPH_CAP_PIN;
  90 
  91         if (mode & CEPH_FILE_MODE_RD)
  92                 caps |= CEPH_CAP_FILE_SHARED |
  93                         CEPH_CAP_FILE_RD | CEPH_CAP_FILE_CACHE;
  94         if (mode & CEPH_FILE_MODE_WR)
  95                 caps |= CEPH_CAP_FILE_EXCL |
  96                         CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER |
  97                         CEPH_CAP_AUTH_SHARED | CEPH_CAP_AUTH_EXCL |
  98                         CEPH_CAP_XATTR_SHARED | CEPH_CAP_XATTR_EXCL;
  99         if (mode & CEPH_FILE_MODE_LAZY)
 100                 caps |= CEPH_CAP_FILE_LAZYIO;
 101 
 102         return caps;
 103 }
 104 EXPORT_SYMBOL(ceph_caps_for_mode);

/* [<][>][^][v][top][bottom][index][help] */