Hello,

Sorry to hijack this but I cleaned it up for rmdir.

Regards,
Pranith.

--- user/kernel/namei.c.orig    2008-12-08 18:26:26.186324000 +0530
+++ user/kernel/namei.c 2008-12-08 18:55:13.633735000 +0530
@@ -31,6 +31,19 @@ static int tux_add_dirent(struct inode *
        return 0;
 }

+static int tux_del_dirent(struct inode *dir, struct dentry *dentry)
+{
+       struct buffer_head *buffer;
+       tux_dirent *entry;
+       int err = -ENOENT;
+
+       entry = tux_find_entry(dir, dentry->d_name.name, dentry->d_name.len,
+                              &buffer);
+       if (entry)
+               err = tux_delete_entry(buffer, entry);
+       return err;
+}
+
 static int tux3_create(struct inode *dir, struct dentry *dentry, int mode,
                       struct nameidata *nd)
 {
@@ -98,19 +111,11 @@ static int tux3_symlink(struct inode *di
 static int tux3_unlink(struct inode *dir, struct dentry *dentry)
 {
        struct inode *inode = dentry->d_inode;
-       struct buffer_head *buffer;
-       tux_dirent *entry;
-       int err = -ENOENT;
+       int err = tux_del_dirent(dir, dentry);

-       entry = tux_find_entry(dir, dentry->d_name.name, dentry->d_name.len,
-                              &buffer);
-       if (entry) {
-               err = tux_delete_entry(buffer, entry);
-               if (!err) {
-                       inode->i_ctime = dir->i_ctime;
-                       inode_dec_link_count(inode);
-                       err = 0;
-               }
+       if (!err) {
+               inode->i_ctime = dir->i_ctime;
+               inode_dec_link_count(inode);
        }
        return err;
 }
@@ -173,13 +178,13 @@ static int tux3_rmdir(struct inode *dir,
 {
        struct inode *inode = dentry->d_inode;
        int err = -ENOTEMPTY;
-       struct buffer_head *buffer;
-       tux_dirent *de;
+
        if (tux_dir_is_empty(inode)) {
-               de = tux_find_entry(dir, dentry->d_name.name, 
dentry->d_name.len, &buffer);
-               err = tux_delete_entry(buffer, de);
+
+               err = tux_del_dirent(dir, dentry);

                if (!err) {
+                       inode->i_ctime = dir->i_ctime;
                        inode->i_size = 0;
                        inode_dec_link_count(inode);
                        inode_dec_link_count(dir);

_______________________________________________
Tux3 mailing list
[email protected]
http://mailman.tux3.org/cgi-bin/mailman/listinfo/tux3

Reply via email to