From: Masaki Saeki <saeki.mas...@po.ntts.co.jp>

This change is a preparation patch for add store_driver.
move the definition of functions that are shared by store_driver

Signed-off-by: Masaki Saeki <saeki.mas...@po.ntts.co.jp>
---
 sheep/sheep_priv.h        |    4 ++
 sheep/store/common.c      |   85 +++++++++++++++++++++++++++++++++++++++++++++
 sheep/store/plain_store.c |   83 -------------------------------------------
 3 files changed, 89 insertions(+), 83 deletions(-)

diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
index 3876b31..fe9cd48 100644
--- a/sheep/sheep_priv.h
+++ b/sheep/sheep_priv.h
@@ -402,6 +402,10 @@ int leave_cluster(void);
 
 void queue_cluster_request(struct request *req);
 
+int prepare_iocb(uint64_t oid, const struct siocb *iocb, bool create);
+int err_to_sderr(const char *path, uint64_t oid, int err);
+int discard(int fd, uint64_t start, uint32_t end);
+
 int update_epoch_log(uint32_t epoch, struct sd_node *nodes, size_t nr_nodes);
 int inc_and_log_epoch(void);
 
diff --git a/sheep/store/common.c b/sheep/store/common.c
index 8843fb8..c681fd0 100644
--- a/sheep/store/common.c
+++ b/sheep/store/common.c
@@ -9,6 +9,9 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <libgen.h>
+#include <linux/falloc.h>
+
 #include "sheep_priv.h"
 
 char *obj_path;
@@ -17,6 +20,88 @@ char *epoch_path;
 struct store_driver *sd_store;
 LIST_HEAD(store_drivers);
 
+#ifndef FALLOC_FL_PUNCH_HOLE
+#define FALLOC_FL_PUNCH_HOLE 0x02
+#endif
+
+#define sector_algined(x) ({ ((x) & (SECTOR_SIZE - 1)) == 0; })
+
+static inline bool iocb_is_aligned(const struct siocb *iocb)
+{
+       return  sector_algined(iocb->offset) && sector_algined(iocb->length);
+}
+
+int prepare_iocb(uint64_t oid, const struct siocb *iocb, bool create)
+{
+       int syncflag = create ? O_SYNC : O_DSYNC;
+       int flags = syncflag | O_RDWR;
+
+       if (uatomic_is_true(&sys->use_journal) || sys->nosync == true)
+               flags &= ~syncflag;
+
+       if (sys->backend_dio && iocb_is_aligned(iocb)) {
+               if (!is_aligned_to_pagesize(iocb->buf))
+                       panic("Memory isn't aligned to pagesize %p", iocb->buf);
+               flags |= O_DIRECT;
+       }
+
+       if (create)
+               flags |= O_CREAT | O_EXCL;
+
+       return flags;
+}
+
+int err_to_sderr(const char *path, uint64_t oid, int err)
+{
+       struct stat s;
+       char p[PATH_MAX], *dir;
+
+       /* Use a temporary buffer since dirname() may modify its argument. */
+       pstrcpy(p, sizeof(p), path);
+       dir = dirname(p);
+
+       sd_debug("%s", path);
+       switch (err) {
+       case ENOENT:
+               if (stat(dir, &s) < 0) {
+                       sd_err("%s corrupted", dir);
+                       return md_handle_eio(dir);
+               }
+               sd_debug("object %016" PRIx64 " not found locally", oid);
+               return SD_RES_NO_OBJ;
+       case ENOSPC:
+               /* TODO: stop automatic recovery */
+               sd_err("diskfull, oid=%"PRIx64, oid);
+               return SD_RES_NO_SPACE;
+       case EMFILE:
+       case ENFILE:
+       case EINTR:
+       case EAGAIN:
+       case EEXIST:
+               sd_err("%m, oid=%"PRIx64, oid);
+               /* make gateway try again */
+               return SD_RES_NETWORK_ERROR;
+       default:
+               sd_err("oid=%"PRIx64", %m", oid);
+               return md_handle_eio(dir);
+       }
+}
+
+int discard(int fd, uint64_t start, uint32_t end)
+{
+       int ret = xfallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE,
+                            start, end - start);
+       if (ret < 0) {
+               if (errno == ENOSYS || errno == EOPNOTSUPP)
+                       sd_info("FALLOC_FL_PUNCH_HOLE is not supported "
+                               "on this filesystem");
+               else
+                       sd_err("failed to discard object, %m");
+       }
+
+       return ret;
+}
+
 int update_epoch_log(uint32_t epoch, struct sd_node *nodes, size_t nr_nodes)
 {
        int ret, len, nodes_len;
diff --git a/sheep/store/plain_store.c b/sheep/store/plain_store.c
index efbf129..7304d65 100644
--- a/sheep/store/plain_store.c
+++ b/sheep/store/plain_store.c
@@ -10,41 +10,9 @@
  */
 
 #include <libgen.h>
-#include <linux/falloc.h>
 
 #include "sheep_priv.h"
 
-#ifndef FALLOC_FL_PUNCH_HOLE
-#define FALLOC_FL_PUNCH_HOLE 0x02
-#endif
-
-#define sector_algined(x) ({ ((x) & (SECTOR_SIZE - 1)) == 0; })
-
-static inline bool iocb_is_aligned(const struct siocb *iocb)
-{
-       return  sector_algined(iocb->offset) && sector_algined(iocb->length);
-}
-
-static int prepare_iocb(uint64_t oid, const struct siocb *iocb, bool create)
-{
-       int syncflag = create ? O_SYNC : O_DSYNC;
-       int flags = syncflag | O_RDWR;
-
-       if (uatomic_is_true(&sys->use_journal) || sys->nosync == true)
-               flags &= ~syncflag;
-
-       if (sys->backend_dio && iocb_is_aligned(iocb)) {
-               if (!is_aligned_to_pagesize(iocb->buf))
-                       panic("Memory isn't aligned to pagesize %p", iocb->buf);
-               flags |= O_DIRECT;
-       }
-
-       if (create)
-               flags |= O_CREAT | O_EXCL;
-
-       return flags;
-}
-
 static int get_store_path(uint64_t oid, uint8_t ec_index, char *path)
 {
        if (is_erasure_oid(oid)) {
@@ -90,57 +58,6 @@ bool default_exist(uint64_t oid, uint8_t ec_index)
        return md_exist(oid, ec_index, path);
 }
 
-static int err_to_sderr(const char *path, uint64_t oid, int err)
-{
-       struct stat s;
-       char p[PATH_MAX], *dir;
-
-       /* Use a temporary buffer since dirname() may modify its argument. */
-       pstrcpy(p, sizeof(p), path);
-       dir = dirname(p);
-
-       sd_debug("%s", path);
-       switch (err) {
-       case ENOENT:
-               if (stat(dir, &s) < 0) {
-                       sd_err("%s corrupted", dir);
-                       return md_handle_eio(dir);
-               }
-               sd_debug("object %016" PRIx64 " not found locally", oid);
-               return SD_RES_NO_OBJ;
-       case ENOSPC:
-               /* TODO: stop automatic recovery */
-               sd_err("diskfull, oid=%"PRIx64, oid);
-               return SD_RES_NO_SPACE;
-       case EMFILE:
-       case ENFILE:
-       case EINTR:
-       case EAGAIN:
-       case EEXIST:
-               sd_err("%m, oid=%"PRIx64, oid);
-               /* make gateway try again */
-               return SD_RES_NETWORK_ERROR;
-       default:
-               sd_err("oid=%"PRIx64", %m", oid);
-               return md_handle_eio(dir);
-       }
-}
-
-static int discard(int fd, uint64_t start, uint32_t end)
-{
-       int ret = xfallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE,
-                            start, end - start);
-       if (ret < 0) {
-               if (errno == ENOSYS || errno == EOPNOTSUPP)
-                       sd_info("FALLOC_FL_PUNCH_HOLE is not supported "
-                               "on this filesystem");
-               else
-                       sd_err("failed to discard object, %m");
-       }
-
-       return ret;
-}
-
 /* Trim zero blocks of the beginning and end of the object. */
 static int default_trim(int fd, uint64_t oid, const struct siocb *iocb,
                        uint64_t *poffset, uint32_t *plen)
-- 
1.7.1

-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
https://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to