Loading fs/coda/cnode.c +7 −10 Original line number Diff line number Diff line Loading @@ -88,24 +88,21 @@ struct inode * coda_iget(struct super_block * sb, struct CodaFid * fid, - link the two up if this is needed - fill in the attributes */ int coda_cnode_make(struct inode **inode, struct CodaFid *fid, struct super_block *sb) struct inode *coda_cnode_make(struct CodaFid *fid, struct super_block *sb) { struct coda_vattr attr; struct inode *inode; int error; /* We get inode numbers from Venus -- see venus source */ error = venus_getattr(sb, fid, &attr); if ( error ) { *inode = NULL; return error; } if (error) return ERR_PTR(error); *inode = coda_iget(sb, fid, &attr); if ( IS_ERR(*inode) ) { inode = coda_iget(sb, fid, &attr); if (IS_ERR(inode)) printk("coda_cnode_make: coda_iget failed\n"); return PTR_ERR(*inode); } return 0; return inode; } Loading fs/coda/coda_fs_i.h +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ struct coda_file_info { #define C_DYING 0x4 /* from venus (which died) */ #define C_PURGE 0x8 int coda_cnode_make(struct inode **, struct CodaFid *, struct super_block *); struct inode *coda_cnode_make(struct CodaFid *, struct super_block *); struct inode *coda_iget(struct super_block *sb, struct CodaFid *fid, struct coda_vattr *attr); struct inode *coda_cnode_makectl(struct super_block *sb); struct inode *coda_fid_to_inode(struct CodaFid *fid, struct super_block *sb); Loading fs/coda/dir.c +13 −16 Original line number Diff line number Diff line Loading @@ -96,12 +96,11 @@ const struct file_operations coda_dir_operations = { /* access routines: lookup, readlink, permission */ static struct dentry *coda_lookup(struct inode *dir, struct dentry *entry, struct nameidata *nd) { struct inode *inode = NULL; struct CodaFid resfid = { { 0, } }; int type = 0; int error = 0; struct super_block *sb = dir->i_sb; const char *name = entry->d_name.name; size_t length = entry->d_name.len; struct inode *inode; int type = 0; if (length > CODA_MAXNAMLEN) { printk(KERN_ERR "name too long: lookup, %s (%*s)\n", Loading @@ -111,23 +110,21 @@ static struct dentry *coda_lookup(struct inode *dir, struct dentry *entry, struc /* control object, create inode on the fly */ if (coda_isroot(dir) && coda_iscontrol(name, length)) { inode = coda_cnode_makectl(dir->i_sb); inode = coda_cnode_makectl(sb); type = CODA_NOCACHE; goto exit; } else { struct CodaFid fid = { { 0, } }; int error = venus_lookup(sb, coda_i2f(dir), name, length, &type, &fid); inode = !error ? coda_cnode_make(&fid, sb) : ERR_PTR(error); } error = venus_lookup(dir->i_sb, coda_i2f(dir), name, length, &type, &resfid); if (!error) error = coda_cnode_make(&inode, &resfid, dir->i_sb); if (error && error != -ENOENT) return ERR_PTR(error); exit: if (inode && !IS_ERR(inode) && (type & CODA_NOCACHE)) if (!IS_ERR(inode) && (type & CODA_NOCACHE)) coda_flag_inode(inode, C_VATTR | C_PURGE); if (inode == ERR_PTR(-ENOENT)) inode = NULL; return d_splice_alias(inode, entry); } Loading fs/coda/inode.c +6 −4 Original line number Diff line number Diff line Loading @@ -204,9 +204,11 @@ static int coda_fill_super(struct super_block *sb, void *data, int silent) printk("coda_read_super: rootfid is %s\n", coda_f2s(&fid)); /* make root inode */ error = coda_cnode_make(&root, &fid, sb); if ( error || !root ) { root = coda_cnode_make(&fid, sb); if (IS_ERR(root)) { error = PTR_ERR(root); printk("Failure of coda_cnode_make for root: error %d\n", error); root = NULL; goto error; } Loading Loading
fs/coda/cnode.c +7 −10 Original line number Diff line number Diff line Loading @@ -88,24 +88,21 @@ struct inode * coda_iget(struct super_block * sb, struct CodaFid * fid, - link the two up if this is needed - fill in the attributes */ int coda_cnode_make(struct inode **inode, struct CodaFid *fid, struct super_block *sb) struct inode *coda_cnode_make(struct CodaFid *fid, struct super_block *sb) { struct coda_vattr attr; struct inode *inode; int error; /* We get inode numbers from Venus -- see venus source */ error = venus_getattr(sb, fid, &attr); if ( error ) { *inode = NULL; return error; } if (error) return ERR_PTR(error); *inode = coda_iget(sb, fid, &attr); if ( IS_ERR(*inode) ) { inode = coda_iget(sb, fid, &attr); if (IS_ERR(inode)) printk("coda_cnode_make: coda_iget failed\n"); return PTR_ERR(*inode); } return 0; return inode; } Loading
fs/coda/coda_fs_i.h +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ struct coda_file_info { #define C_DYING 0x4 /* from venus (which died) */ #define C_PURGE 0x8 int coda_cnode_make(struct inode **, struct CodaFid *, struct super_block *); struct inode *coda_cnode_make(struct CodaFid *, struct super_block *); struct inode *coda_iget(struct super_block *sb, struct CodaFid *fid, struct coda_vattr *attr); struct inode *coda_cnode_makectl(struct super_block *sb); struct inode *coda_fid_to_inode(struct CodaFid *fid, struct super_block *sb); Loading
fs/coda/dir.c +13 −16 Original line number Diff line number Diff line Loading @@ -96,12 +96,11 @@ const struct file_operations coda_dir_operations = { /* access routines: lookup, readlink, permission */ static struct dentry *coda_lookup(struct inode *dir, struct dentry *entry, struct nameidata *nd) { struct inode *inode = NULL; struct CodaFid resfid = { { 0, } }; int type = 0; int error = 0; struct super_block *sb = dir->i_sb; const char *name = entry->d_name.name; size_t length = entry->d_name.len; struct inode *inode; int type = 0; if (length > CODA_MAXNAMLEN) { printk(KERN_ERR "name too long: lookup, %s (%*s)\n", Loading @@ -111,23 +110,21 @@ static struct dentry *coda_lookup(struct inode *dir, struct dentry *entry, struc /* control object, create inode on the fly */ if (coda_isroot(dir) && coda_iscontrol(name, length)) { inode = coda_cnode_makectl(dir->i_sb); inode = coda_cnode_makectl(sb); type = CODA_NOCACHE; goto exit; } else { struct CodaFid fid = { { 0, } }; int error = venus_lookup(sb, coda_i2f(dir), name, length, &type, &fid); inode = !error ? coda_cnode_make(&fid, sb) : ERR_PTR(error); } error = venus_lookup(dir->i_sb, coda_i2f(dir), name, length, &type, &resfid); if (!error) error = coda_cnode_make(&inode, &resfid, dir->i_sb); if (error && error != -ENOENT) return ERR_PTR(error); exit: if (inode && !IS_ERR(inode) && (type & CODA_NOCACHE)) if (!IS_ERR(inode) && (type & CODA_NOCACHE)) coda_flag_inode(inode, C_VATTR | C_PURGE); if (inode == ERR_PTR(-ENOENT)) inode = NULL; return d_splice_alias(inode, entry); } Loading
fs/coda/inode.c +6 −4 Original line number Diff line number Diff line Loading @@ -204,9 +204,11 @@ static int coda_fill_super(struct super_block *sb, void *data, int silent) printk("coda_read_super: rootfid is %s\n", coda_f2s(&fid)); /* make root inode */ error = coda_cnode_make(&root, &fid, sb); if ( error || !root ) { root = coda_cnode_make(&fid, sb); if (IS_ERR(root)) { error = PTR_ERR(root); printk("Failure of coda_cnode_make for root: error %d\n", error); root = NULL; goto error; } Loading