pre-46-1 minix patch

Michael L. Galbraith (mikeg@weiden.de)
Fri, 18 Jul 1997 19:22:24 +0200 (MET DST)


This patch is a completion patch trying to integrate the latest changes
into minix. It is tested and seems to work well. If there's anything
I missed, I'd appreciate a punt in the right direction. The important
portions of this code should look very familiar to you :).

-Mike

--- ./fs/minix/inode.c.org Fri Jul 18 10:14:43 1997
+++ ./fs/minix/inode.c Fri Jul 18 10:16:17 1997
@@ -77,9 +77,10 @@

static struct super_operations minix_sops = {
minix_read_inode,
- NULL,
minix_write_inode,
minix_put_inode,
+ NULL,
+ NULL,
minix_put_super,
minix_write_super,
minix_statfs,
--- ./fs/minix/namei.c.org Fri Jul 18 10:30:15 1997
+++ ./fs/minix/namei.c Fri Jul 18 11:44:45 1997
@@ -104,24 +104,22 @@
return NULL;
}

-int minix_lookup(struct inode * dir, struct qstr *name,
- struct inode ** result)
+int minix_lookup(struct inode * dir, struct dentry *dentry)
{
- int ino;
+ struct inode * inode = NULL;
struct minix_dir_entry * de;
struct buffer_head * bh;

- *result = NULL;
- if (!dir)
- return -ENOENT;
- if (!S_ISDIR(dir->i_mode))
- return -ENOENT;
- if (!(bh = minix_find_entry(dir, name->name, name->len, &de)))
- return -ENOENT;
- ino = de->inode;
- brelse(bh);
- if (!(*result = iget(dir->i_sb,ino)))
- return -EACCES;
+ bh = minix_find_entry(dir, dentry->d_name.name, dentry->d_name.len, &de);
+ if (bh) {
+ unsigned long ino = le32_to_cpu(de->inode);
+ brelse (bh);
+ inode = iget(dir->i_sb, ino);
+
+ if (!inode)
+ return -EACCES;
+ }
+ d_add(dentry, inode);
return 0;
}

@@ -602,29 +600,21 @@
return 0;
}

-static int subdir(struct inode * new_inode, struct inode * old_inode)
+static int subdir(struct dentry * new_dentry, struct dentry * old_dentry)
{
- int ino;
- int result;
+ int result = 0;

- new_inode->i_count++;
- result = 0;
for (;;) {
- if (new_inode == old_inode) {
- result = 1;
- break;
+ if (new_dentry != old_dentry) {
+ struct dentry * parent = new_dentry->d_parent;
+ if (parent == new_dentry)
+ break;
+ new_dentry = parent;
+ continue;
}
- if (new_inode->i_dev != old_inode->i_dev)
- break;
- ino = new_inode->i_ino;
- if (minix_lookup(new_inode,
- &(struct qstr) { "..", 2, 0 },
- &new_inode))
- break;
- if (new_inode->i_ino == ino)
- break;
+ result = 1;
+ break;
}
- iput(new_inode);
return result;
}

@@ -690,7 +680,7 @@
if (!S_ISDIR(old_inode->i_mode))
goto end_rename;
retval = -EINVAL;
- if (subdir(new_dir, old_inode))
+ if (subdir(new_dentry, old_dentry))
goto end_rename;
retval = -ENOTEMPTY;
if (!empty_dir(new_inode))
@@ -709,7 +699,7 @@
if (new_inode && !S_ISDIR(new_inode->i_mode))
goto end_rename;
retval = -EINVAL;
- if (subdir(new_dir, old_inode))
+ if (subdir(new_dentry, old_dentry))
goto end_rename;
retval = -EIO;
dir_bh = minix_bread(old_inode,0,0);
--- ./include/linux/minix_fs.h.org Fri Jul 18 10:36:08 1997
+++ ./include/linux/minix_fs.h Fri Jul 18 11:44:00 1997
@@ -88,8 +88,7 @@

#ifdef __KERNEL__

-extern int minix_lookup(struct inode * dir, struct qstr *name,
- struct inode ** result);
+extern int minix_lookup(struct inode * dir, struct dentry *dentry);
extern int minix_create(struct inode * dir, struct dentry *dentry, int mode);
extern int minix_mkdir(struct inode * dir, struct dentry *dentry, int mode);
extern int minix_rmdir(struct inode * dir, struct dentry *dentry);
--- ./kernel/ksyms.c.org Fri Jul 18 12:50:04 1997
+++ ./kernel/ksyms.c Fri Jul 18 12:52:16 1997
@@ -154,6 +154,10 @@
EXPORT_SYMBOL(close_fp);
EXPORT_SYMBOL(d_alloc_root);
EXPORT_SYMBOL(d_delete);
+EXPORT_SYMBOL(d_add);
+EXPORT_SYMBOL(d_move);
+EXPORT_SYMBOL(d_instantiate);
+EXPORT_SYMBOL(__mark_inode_dirty);
EXPORT_SYMBOL(insert_file_free);
EXPORT_SYMBOL(check_disk_change);
EXPORT_SYMBOL(invalidate_buffers);