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