Whamcloud - gitweb
- Lustre Lite at least superficially ready for 2.5
authorbraam <braam>
Sun, 20 Oct 2002 19:09:24 +0000 (19:09 +0000)
committerbraam <braam>
Sun, 20 Oct 2002 19:09:24 +0000 (19:09 +0000)
lustre/Makefile.am
lustre/include/linux/lustre_lite.h
lustre/llite/Makefile.am
lustre/llite/dcache.c
lustre/llite/dir.c
lustre/llite/file.c
lustre/llite/namei.c
lustre/llite/super25.c

index 7c580ea..702f5fd 100644 (file)
@@ -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
index b0b7917..46da130 100644 (file)
@@ -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);
 
 /****
index 6ae11c8..03612fc 100644 (file)
@@ -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 .
index 0b4f9c6..0b15252 100644 (file)
@@ -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)
 {
index 15dd4c6..d824376 100644 (file)
@@ -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);
index b8966d9..505333b 100644 (file)
@@ -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
 };
index ff5c14b..c6bc754 100644 (file)
@@ -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);
index 10feafe..d7c8355 100644 (file)
@@ -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;