Whamcloud - gitweb
b=16150
[fs/lustre-release.git] / lustre / liblustre / rw.c
index d3e4a9f..53bda1f 100644 (file)
@@ -1,24 +1,41 @@
 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
  * vim:expandtab:shiftwidth=8:tabstop=8:
  *
- * Lustre Light block IO
+ * GPL HEADER START
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
- *  Copyright (c) 2002-2004 Cluster File Systems, Inc.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
  *
- *   This file is part of Lustre, http://www.lustre.org.
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
  *
- *   Lustre is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
  *
- *   Lustre is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
  *
- *   You should have received a copy of the GNU General Public License
- *   along with Lustre; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * GPL HEADER END
+ */
+/*
+ * Copyright  2008 Sun Microsystems, Inc. All rights reserved
+ * Use is subject to license terms.
+ */
+/*
+ * This file is part of Lustre, http://www.lustre.org/
+ * Lustre is a trademark of Sun Microsystems, Inc.
+ *
+ * lustre/liblustre/rw.c
+ *
+ * Lustre Light block IO
  */
 
 #define DEBUG_SUBSYSTEM S_LLITE
@@ -57,14 +74,14 @@ struct llu_io_group
         int                     lig_npages;
         __u64                   lig_rwcount;
         struct ll_async_page   *lig_llaps;
-        struct page            *lig_pages;
+        cfs_page_t             *lig_pages;
         void                   *lig_llap_cookies;
 };
 
 #define LLU_IO_GROUP_SIZE(x) \
         (sizeof(struct llu_io_group) + \
          (sizeof(struct ll_async_page) + \
-          sizeof(struct page) + \
+          sizeof(cfs_page_t) + \
           llap_cookie_size) * (x))
 
 struct llu_io_session
@@ -93,8 +110,7 @@ static int llu_lock_to_stripe_offset(struct inode *inode, struct ldlm_lock *lock
         struct {
                 char name[16];
                 struct ldlm_lock *lock;
-                struct lov_stripe_md *lsm;
-        } key = { .name = "lock_to_stripe", .lock = lock, .lsm = lsm };
+        } key = { .name = KEY_LOCK_TO_STRIPE, .lock = lock };
         __u32 stripe, vallen = sizeof(stripe);
         int rc;
         ENTRY;
@@ -103,7 +119,7 @@ static int llu_lock_to_stripe_offset(struct inode *inode, struct ldlm_lock *lock
                 RETURN(0);
 
         /* get our offset in the lov */
-        rc = obd_get_info(exp, sizeof(key), &key, &vallen, &stripe);
+        rc = obd_get_info(exp, sizeof(key), &key, &vallen, &stripe, lsm);
         if (rc != 0) {
                 CERROR("obd_get_info: rc = %d\n", rc);
                 LBUG();
@@ -206,7 +222,7 @@ static int llu_glimpse_callback(struct ldlm_lock *lock, void *reqp)
         lvb = req_capsule_server_get(&req->rq_pill, &RMF_DLM_LVB);
         lvb->lvb_size = lli->lli_smd->lsm_oinfo[stripe]->loi_kms;
 
-        LDLM_DEBUG(lock, "i_size: %llu -> stripe number %u -> kms "LPU64,
+        LDLM_DEBUG(lock, "i_size: "LPU64" -> stripe number %u -> kms "LPU64,
                    (__u64)llu_i2stat(inode)->st_size, stripe,lvb->lvb_size);
  iput:
         I_RELE(inode);
@@ -340,7 +356,7 @@ int llu_extent_lock(struct ll_file_data *fd, struct inode *inode,
                 RETURN(0);
 
         CDEBUG(D_DLMTRACE, "Locking inode %llu, start "LPU64" end "LPU64"\n",
-               (__u64)st->st_ino, policy->l_extent.start,
+               (unsigned long long)st->st_ino, policy->l_extent.start,
                policy->l_extent.end);
 
         einfo.ei_type = LDLM_EXTENT;
@@ -401,10 +417,17 @@ struct ll_async_page {
         int             llap_magic;
         void           *llap_cookie;
         int             llap_queued;
-        struct page    *llap_page;
+        cfs_page_t     *llap_page;
         struct inode   *llap_inode;
 };
 
+static inline struct ll_async_page *llap_from_cookie(void *ptr)
+{
+        struct ll_async_page *ap = ptr;
+        LASSERT(ap->llap_magic == LLAP_MAGIC);
+        return ap;
+}
+
 static void llu_ap_fill_obdo(void *data, int cmd, struct obdo *oa)
 {
         struct ll_async_page *llap;
@@ -413,7 +436,7 @@ static void llu_ap_fill_obdo(void *data, int cmd, struct obdo *oa)
         obd_flag valid_flags;
         ENTRY;
 
-        llap = LLAP_FROM_COOKIE(data);
+        llap = llap_from_cookie(data);
         inode = llap->llap_inode;
         lsm = llu_i2info(inode)->lli_smd;
 
@@ -435,7 +458,7 @@ static void llu_ap_update_obdo(void *data, int cmd, struct obdo *oa,
         struct ll_async_page *llap;
         ENTRY;
 
-        llap = LLAP_FROM_COOKIE(data);
+        llap = llap_from_cookie(data);
         obdo_from_inode(oa, llap->llap_inode, valid);
 
         EXIT;
@@ -445,10 +468,10 @@ static void llu_ap_update_obdo(void *data, int cmd, struct obdo *oa,
 static int llu_ap_completion(void *data, int cmd, struct obdo *oa, int rc)
 {
         struct ll_async_page *llap;
-        struct page *page;
+        cfs_page_t *page;
         ENTRY;
 
-        llap = LLAP_FROM_COOKIE(data);
+        llap = llap_from_cookie(data);
         llap->llap_queued = 0;
         page = llap->llap_page;
 
@@ -481,7 +504,7 @@ static int llu_queue_pio(int cmd, struct llu_io_group *group,
         struct intnl_stat *st = llu_i2stat(group->lig_inode);
         struct lov_stripe_md *lsm = lli->lli_smd;
         struct obd_export *exp = llu_i2obdexp(group->lig_inode);
-        struct page *pages = &group->lig_pages[group->lig_npages],*page = pages;
+        cfs_page_t *pages = &group->lig_pages[group->lig_npages],*page = pages;
         struct ll_async_page *llap = &group->lig_llaps[group->lig_npages];
         void *llap_cookie = group->lig_llap_cookies +
                 llap_cookie_size * group->lig_npages;
@@ -623,7 +646,7 @@ struct llu_io_group * get_io_group(struct inode *inode, int maxpages,
         group->lig_maxpages = maxpages;
         group->lig_params = params;
         group->lig_llaps = (struct ll_async_page *)(group + 1);
-        group->lig_pages = (struct page *)(&group->lig_llaps[maxpages]);
+        group->lig_pages = (cfs_page_t *)(&group->lig_llaps[maxpages]);
         group->lig_llap_cookies = (void *)(&group->lig_pages[maxpages]);
 
         rc = oig_init(&group->lig_oig);