From baf1a0763f7713c1c356a5691b2bc0bfbf23e2b7 Mon Sep 17 00:00:00 2001
From: braam <braam>
Date: Sun, 20 Oct 2002 19:09:24 +0000
Subject: [PATCH] - Lustre Lite at least superficially ready for 2.5

---
 lustre/Makefile.am                 |  4 ++--
 lustre/include/linux/lustre_lite.h |  4 ----
 lustre/llite/Makefile.am           |  4 ++--
 lustre/llite/dcache.c              |  2 --
 lustre/llite/dir.c                 | 12 ++++++++--
 lustre/llite/file.c                | 14 ++++++++++-
 lustre/llite/namei.c               | 37 ++++++++++++++++++++++++++----
 lustre/llite/super25.c             |  4 ++--
 8 files changed, 62 insertions(+), 19 deletions(-)

diff --git a/lustre/Makefile.am b/lustre/Makefile.am
index 7c580ea1fa..702f5fd535 100644
--- a/lustre/Makefile.am
+++ b/lustre/Makefile.am
@@ -6,8 +6,8 @@
 AUTOMAKE_OPTIONS = foreign
 
 # NOTE: keep extN before mds
-SUBDIRS = lov utils obdclass ldlm ptlrpc llite lib obdecho mdc osc
-SUBDIRS+=  extN mds ost tests obdfilter doc scripts 
+SUBDIRS = lov utils obdclass ldlm ptlrpc lib obdecho mdc osc ost llite
+SUBDIRS+=  extN mds tests obdfilter doc scripts 
 
 DIST_SUBDIRS = $(SUBDIRS)
 EXTRA_DIST = BUGS FDL Rules include patches archdep.m4
diff --git a/lustre/include/linux/lustre_lite.h b/lustre/include/linux/lustre_lite.h
index b0b7917031..46da130e2f 100644
--- a/lustre/include/linux/lustre_lite.h
+++ b/lustre/include/linux/lustre_lite.h
@@ -160,11 +160,7 @@ int ll_lock(struct inode *dir, struct dentry *dentry,
 int ll_unlock(__u32 mode, struct lustre_handle *lockh);
 
 /* dcache.c */
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0))
-void ll_intent_release(struct nameidata *);
-#else
 void ll_intent_release(struct dentry *, struct lookup_intent *);
-#endif
 int ll_set_dd(struct dentry *de);
 
 /****
diff --git a/lustre/llite/Makefile.am b/lustre/llite/Makefile.am
index 6ae11c8bf2..03612fc227 100644
--- a/lustre/llite/Makefile.am
+++ b/lustre/llite/Makefile.am
@@ -10,8 +10,8 @@ modulefs_DATA = llite.o
 EXTRA_PROGRAMS = llite
 
 llite_SOURCES = dcache.c commit_callback.c super.c rw.c super25.c
-llite_SOURCES += file.c dir.c sysctl.c namei.c symlink.c
-llite_SOURCES += lov_pack.c recover.c
+llite_SOURCES += file.c dir.c sysctl.c symlink.c
+llite_SOURCES += lov_pack.c recover.c namei.c
 
 lov_pack.c: 
 	test -e lov_pack.c || ln -sf $(top_srcdir)/lib/lov_pack.c .
diff --git a/lustre/llite/dcache.c b/lustre/llite/dcache.c
index 0b4f9c6ac4..0b15252c72 100644
--- a/lustre/llite/dcache.c
+++ b/lustre/llite/dcache.c
@@ -40,7 +40,6 @@ void ll_release(struct dentry *de)
         EXIT;
 }
 
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
 void ll_intent_release(struct dentry *de, struct lookup_intent *it)
 {
         struct lustre_handle *handle;
@@ -67,7 +66,6 @@ void ll_intent_release(struct dentry *de, struct lookup_intent *it)
         //up(&ll_d2d(de)->lld_it_sem);
         EXIT;
 }
-#endif
 
 int ll_revalidate2(struct dentry *de, int flags, struct lookup_intent *it)
 {
diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
index 15dd4c6fd9..d8243760fe 100644
--- a/lustre/llite/dir.c
+++ b/lustre/llite/dir.c
@@ -91,7 +91,7 @@ static int ll_dir_readpage(struct file *file, struct page *page)
         }
         ldlm_lock_dump((void *)(unsigned long)lockh.addr);
 
-        if (Page_Uptodate(page)) {
+        if (PageUptodate(page)) {
                 CERROR("Explain this please?\n");
                 GOTO(readpage_out, rc);
         }
@@ -127,6 +127,7 @@ struct address_space_operations ll_dir_aops = {
         prepare_write: ll_dir_prepare_write
 };
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
 int waitfor_one_page(struct page *page)
 {
         int error = 0;
@@ -140,6 +141,13 @@ int waitfor_one_page(struct page *page)
         } while ((bh = bh->b_this_page) != head);
         return error;
 }
+#else 
+int waitfor_one_page(struct page *page)
+{
+        wait_on_page_locked(page);
+        return 0;
+}
+#endif
 
 /*
  * ext2 uses block-sized chunks. Arguably, sector-sized ones would be
@@ -279,7 +287,7 @@ static struct page * ext2_get_page(struct inode *dir, unsigned long n)
         if (!IS_ERR(page)) {
                 wait_on_page(page);
                 kmap(page);
-                if (!Page_Uptodate(page))
+                if (!PageUptodate(page))
                         goto fail;
                 if (!PageChecked(page))
                         ext2_check_page(page);
diff --git a/lustre/llite/file.c b/lustre/llite/file.c
index b8966d9935..505333b723 100644
--- a/lustre/llite/file.c
+++ b/lustre/llite/file.c
@@ -690,6 +690,8 @@ int ll_fsync(struct file *file, struct dentry *dentry, int data)
         return 0;
 }
 
+
+
 static int ll_inode_revalidate(struct dentry *dentry)
 {
         struct inode *inode = dentry->d_inode;
@@ -706,6 +708,12 @@ static int ll_inode_revalidate(struct dentry *dentry)
         RETURN(ll_file_size(inode, lsm));
 }
 
+static int ll_getattr(struct vfsmount *mnt, struct dentry *de, 
+                      struct kstat *stat)
+{
+        return ll_inode_revalidate(de);
+}
+
 struct file_operations ll_file_operations = {
         read:           ll_file_read,
         write:          ll_file_write,
@@ -720,5 +728,9 @@ struct file_operations ll_file_operations = {
 struct inode_operations ll_file_inode_operations = {
         truncate:   ll_truncate,
         setattr:    ll_setattr,
-        revalidate: ll_inode_revalidate
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+                getattr: ll_getattr,
+#else
+        revalidate: ll_inode_revalidate,
+#endif
 };
diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c
index ff5c14bfb8..c6bc754cac 100644
--- a/lustre/llite/namei.c
+++ b/lustre/llite/namei.c
@@ -88,7 +88,7 @@ static inline int ext2_add_nondir(struct dentry *dentry, struct inode *inode)
 }
 
 /* methods */
-static int ll_find_inode(struct inode *inode, unsigned long ino, void *opaque)
+static int ll_test_inode(struct inode *inode, void *opaque)
 {
         struct ll_read_inode2_cookie *lic = opaque;
         struct mds_body *body = lic->lic_body;
@@ -145,6 +145,36 @@ int ll_unlock(__u32 mode, struct lustre_handle *lockh)
         RETURN(0);
 }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0))
+extern int ll_read_inode2(struct inode *inode, void *opaque);
+struct inode *ll_iget(struct super_block *sb, ino_t hash, 
+                      struct ll_read_inode2_cookie *lic)
+{
+        struct inode *inode;
+
+	inode = iget5_locked(sb, hash, ll_test_inode, ll_read_inode2, lic);
+
+	if (!inode)
+		return ERR_PTR(-ENOMEM);
+
+	if (inode->i_state & I_NEW) {
+                
+		unlock_new_inode(inode);
+	}
+
+        // XXX Coda always fills inodes, should Lustre?
+        return inode;
+}
+#else
+struct inode *ll_iget(struct super_block *sb, inot_t hash, 
+                      struct ll_read_inode2_cookie *lic)
+{
+        struct inode *inode;
+        inode = iget4(sb, hash, ll_find_inode, lic);
+        return inode;
+}
+#endif
+
 static struct dentry *ll_lookup2(struct inode *dir, struct dentry *dentry,
                                  struct lookup_intent *it)
 {
@@ -276,8 +306,7 @@ static struct dentry *ll_lookup2(struct inode *dir, struct dentry *dentry,
 
         /* No rpc's happen during iget4, -ENOMEM's are possible */
         LASSERT(ino != 0);
-        inode = iget4(dir->i_sb, ino, ll_find_inode, &lic);
-
+        inode = ll_iget(dir->i_sb, ino, &lic);
         if (!inode) {
                 ptlrpc_free_req(request);
                 ll_intent_release(dentry, it);
@@ -377,7 +406,7 @@ static struct inode *ll_create_node(struct inode *dir, const char *name,
         lic.lic_body = body;
 
         LASSERT(body->ino != 0);
-        inode = iget4(dir->i_sb, body->ino, ll_find_inode, &lic);
+        inode = ll_iget(dir->i_sb, body->ino, &lic);
         if (IS_ERR(inode)) {
                 int rc = PTR_ERR(inode);
                 CERROR("new_inode -fatal: rc %d\n", rc);
diff --git a/lustre/llite/super25.c b/lustre/llite/super25.c
index 10feafee14..d7c83552e3 100644
--- a/lustre/llite/super25.c
+++ b/lustre/llite/super25.c
@@ -32,7 +32,7 @@ extern void ll_destroy_inodecache(void);
 extern int ll_recover(struct recovd_data *, int);
 extern int ll_commitcbd_setup(struct ll_sb_info *);
 extern int ll_commitcbd_cleanup(struct ll_sb_info *);
-static int ll_read_inode2(struct inode *inode, void *opaque);
+int ll_read_inode2(struct inode *inode, void *opaque);
 
 static char *ll_read_opt(const char *opt, char *data)
 {
@@ -470,7 +470,7 @@ void ll_update_inode(struct inode *inode, struct mds_body *body)
                 inode->i_size = body->size;
 }
 
-static int ll_read_inode2(struct inode *inode, void *opaque)
+int ll_read_inode2(struct inode *inode, void *opaque)
 {
         struct ll_read_inode2_cookie *lic = opaque;
         struct mds_body *body = lic->lic_body;
-- 
GitLab