Whamcloud - gitweb
b=20500
[fs/lustre-release.git] / lustre / llite / llite_nfs.c
index afd0c9b..f20bf65 100644 (file)
@@ -1,27 +1,44 @@
 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
  * vim:expandtab:shiftwidth=8:tabstop=8:
  *
- *   NFS export of Lustre Light File System 
+ * GPL HEADER START
  *
- *   Copyright (c) 2002, 2006 Cluster File Systems, Inc.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
- *   Author: Yury Umanets <umka@clusterfs.com>
- *           Huang Hua <huanghua@clusterfs.com>
+ * 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/lustre/llite/llite_nfs.c
+ *
+ * NFS export of Lustre Light File System
+ *
+ * Author: Yury Umanets <umka@clusterfs.com>
+ * Author: Huang Hua <huanghua@clusterfs.com>
  */
 
 #define DEBUG_SUBSYSTEM S_LLITE
 #include <linux/exportfs.h>
 #endif
 
+__u32 get_uuid2int(const char *name, int len)
+{
+        __u32 key0 = 0x12a3fe2d, key1 = 0x37abe8f9;
+        while (len--) {
+                __u32 key = key1 + (key0 ^ (*name++ * 7152373));
+                if (key & 0x80000000) key -= 0x7fffffff;
+                key1 = key0;
+                key0 = key;
+        }
+        return (key0 << 1);
+}
+
 static int ll_nfs_test_inode(struct inode *inode, void *opaque)
 {
         return lu_fid_eq(&ll_i2info(inode)->lli_fid,
@@ -70,7 +99,7 @@ static struct inode *search_inode_for_lustre(struct super_block *sb,
                 RETURN(ERR_PTR(rc));
         }
 
-        rc = ll_prep_inode(&inode, req, REPLY_REC_OFF, sb);
+        rc = ll_prep_inode(&inode, req, sb);
         ptlrpc_req_finished(req);
         if (rc)
                 RETURN(ERR_PTR(rc));
@@ -78,8 +107,6 @@ static struct inode *search_inode_for_lustre(struct super_block *sb,
         RETURN(inode);
 }
 
-extern struct dentry_operations ll_d_ops;
-
 static struct dentry *ll_iget_for_nfs(struct super_block *sb,
                                       struct lu_fid *fid,
                                       umode_t mode)
@@ -109,8 +136,9 @@ static struct dentry *ll_iget_for_nfs(struct super_block *sb,
                 iput(inode);
                 RETURN(ERR_PTR(-ENOMEM));
         }
-        ll_set_dd(result);
-        result->d_op = &ll_d_ops;
+
+        ll_dops_init(result, 1);
+
         RETURN(result);
 }
 
@@ -159,7 +187,7 @@ static int ll_encode_fh(struct dentry *de, __u32 *fh, int *plen, int connectable
         ENTRY;
 
         CDEBUG(D_INFO, "encoding for (%lu,"DFID") maxlen=%d minlen=%d\n",
-                       inode->i_ino, PFID(fid), *plen, ONE_FH_LEN);
+                       inode->i_ino, PFID(fid), *plen, (int)ONE_FH_LEN);
 
         if (*plen < ONE_FH_LEN)
                 RETURN(255);
@@ -219,8 +247,7 @@ static struct dentry *ll_get_parent(struct dentry *dchild)
                 CERROR("failure %d inode %lu get parent\n", rc, dir->i_ino);
                 RETURN(ERR_PTR(rc));
         }
-        body = lustre_msg_buf(req->rq_repmsg, REPLY_REC_OFF, sizeof(*body)); 
-       
+        body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
         LASSERT(body->valid & OBD_MD_FLID);
         
         CDEBUG(D_INFO, "parent for "DFID" is "DFID"\n",