Whamcloud - gitweb
LU-2748 fsfilt: ext4_map_inode_page in osd and ldisk out of sync
[fs/lustre-release.git] / libcfs / libcfs / user-mem.c
index 7c2cc4d..615fa00 100644 (file)
@@ -1,6 +1,4 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
  * GPL HEADER START
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -26,7 +24,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright  2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  */
 /*
 
 #include <libcfs/libcfs.h>
 
-#ifdef __linux__
-#include <malloc.h>             /* memalign declared here on linux */
-#endif
-
 /*
  * Allocator
  */
 
-cfs_page_t *cfs_alloc_pages(int mask, unsigned long order)
+cfs_page_t *cfs_alloc_page(unsigned int flags)
 {
         cfs_page_t *pg = malloc(sizeof(*pg));
+        int rc = 0;
 
         if (!pg)
                 return NULL;
-#if 0 //#ifdef MAP_ANONYMOUS
-        pg->addr = mmap(0, PAGE_SIZE << order, PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
-#elif defined (__DARWIN__)
-        pg->addr = valloc(CFS_PAGE_SIZE << order);
+        pg->addr = NULL;
+
+#if defined (__DARWIN__)
+        pg->addr = valloc(CFS_PAGE_SIZE);
+#elif defined (__WINNT__)
+        pg->addr = pgalloc(0);
 #else
-        pg->addr = memalign(CFS_PAGE_SIZE, CFS_PAGE_SIZE << order);
+        rc = posix_memalign(&pg->addr, CFS_PAGE_SIZE, CFS_PAGE_SIZE);
 #endif
-
-        if (!pg->addr) {
+        if (rc != 0 || pg->addr == NULL) {
                 free(pg);
                 return NULL;
         }
         return pg;
 }
 
-void cfs_free_pages(cfs_page_t *pg, int what)
+void cfs_free_page(cfs_page_t *pg)
 {
-#if 0 //#ifdef MAP_ANONYMOUS
-        munmap(pg->addr, PAGE_SIZE);
+#if defined (__WINNT__)
+        pgfree(pg->addr);
 #else
         free(pg->addr);
 #endif
-        free(pg);
-}
-
-cfs_page_t *cfs_alloc_page(unsigned int flags)
-{
-        cfs_page_t *pg = malloc(sizeof(*pg));
-
-        if (!pg)
-                return NULL;
-        pg->addr = malloc(CFS_PAGE_SIZE);
 
-        if (!pg->addr) {
-                free(pg);
-                return NULL;
-        }
-        return pg;
-}
-
-void cfs_free_page(cfs_page_t *pg)
-{
-        free(pg->addr);
         free(pg);
 }