[prev in list] [next in list] [prev in thread] [next in thread] 

List:       intermezzo-cvs
Subject:    CVS: is/fs25 dir.c,1.1,1.2
From:       "Peter J. Braam" <braam () users ! sourceforge ! net>
Date:       2002-10-11 23:30:39
[Download RAW message or body]

Update of /cvsroot/intermezzo/is/fs25
In directory usw-pr-cvs1:/tmp/cvs-serv27983

Modified Files:
	dir.c 
Log Message:
fixes for 2.5


Index: dir.c
===================================================================
RCS file: /cvsroot/intermezzo/is/fs25/dir.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -U2 -r1.1 -r1.2
--- dir.c	11 Oct 2002 22:52:01 -0000	1.1
+++ dir.c	11 Oct 2002 23:30:37 -0000	1.2
@@ -26,4 +26,5 @@
 
 #include <asm/bitops.h>
+#include <asm/ioctls.h>
 #include <asm/uaccess.h>
 #include <asm/system.h>
@@ -686,14 +687,16 @@
          * still have dentry references.  double_lock doesn't do dget for us.
          */
-        unlock_kernel();
         if (d_unhashed(dentry))
                 d_rehash(dentry);
         //        double_up(&dir->i_zombie, &dentry->d_inode->i_zombie);
-        double_up(&dir->i_sem, &dentry->d_inode->i_sem);
+        up(&dentry->d_inode->i_sem);
+        up(&dir->i_sem);
 
         CDEBUG(D_FILE, "getting permit\n");
         if ( presto_get_permit(parent->d_inode) < 0 ) {
                 EXIT;
-                double_down(&dir->i_sem, &dentry->d_inode->i_sem);
+                down(&dir->i_sem);
+                down(&dentry->d_inode->i_sem);
+                //                double_down(&dir->i_sem, &dentry->d_inode->i_sem);
                 //                double_down(&dir->i_zombie, &dentry->d_inode->i_zombie);
                 
@@ -703,5 +706,6 @@
         CDEBUG(D_FILE, "locking\n");
 
-        double_down(&dir->i_sem, &dentry->d_inode->i_sem);
+        down(&dir->i_sem);
+        down(&dentry->d_inode->i_sem);
         parent = dentry->d_parent;
         memset(&info, 0, sizeof(info));
@@ -757,78 +761,4 @@
 }
 
-inline void presto_triple_unlock(struct inode *old_dir, struct inode *new_dir, 
-                                 struct dentry *old_dentry, 
-                                 struct dentry *new_dentry, int triple)
-{
-        /* rename_dir case */ 
-        if (S_ISDIR(old_dentry->d_inode->i_mode)) { 
-                if (triple) {                   
-                        //                        triple_up(&old_dir->i_zombie,
-                        //                                  &new_dir->i_zombie,
-                        //                                  &new_dentry->d_inode->i_zombie);
-                } else { 
-                        //                        double_up(&old_dir->i_zombie,
-                        //                                  &new_dir->i_zombie);
-                }
-                up(&old_dir->i_sb->s_vfs_rename_sem);
-        } else /* this case is rename_other */
-                //                double_up(&old_dir->i_zombie, &new_dir->i_zombie);
-        /* done by do_rename */
-        unlock_kernel();
-        double_up(&old_dir->i_sem, &new_dir->i_sem);
-}
-
-inline void presto_triple_fulllock(struct inode *old_dir, 
-                                   struct inode *new_dir, 
-                                   struct dentry *old_dentry, 
-                                   struct dentry *new_dentry, int triple)
-{
-        /* done by do_rename */
-        double_down(&old_dir->i_sem, &new_dir->i_sem);
-        lock_kernel();
-        /* rename_dir case */ 
-        if (S_ISDIR(old_dentry->d_inode->i_mode)) { 
-                down(&old_dir->i_sb->s_vfs_rename_sem);
-                if (triple) {                   
-                        //                        triple_down(&old_dir->i_zombie,
-                        //                                  &new_dir->i_zombie,
-                        //                                  &new_dentry->d_inode->i_zombie);
-                } else { 
-                        //                        double_down(&old_dir->i_zombie,
-                        //                                  &new_dir->i_zombie);
-                }
-        } else /* this case is rename_other */
-                //                double_down(&old_dir->i_zombie, &new_dir->i_zombie);
-}
-
-inline void presto_triple_relock_sem(struct inode *old_dir, 
-                                   struct inode *new_dir, 
-                                   struct dentry *old_dentry, 
-                                   struct dentry *new_dentry, int triple)
-{
-        /* done by do_rename */
-        double_down(&old_dir->i_sem, &new_dir->i_sem);
-        lock_kernel();
-}
-
-inline void presto_triple_relock_other(struct inode *old_dir, 
-                                   struct inode *new_dir, 
-                                   struct dentry *old_dentry, 
-                                   struct dentry *new_dentry, int triple)
-{
-        /* rename_dir case */ 
-        if (S_ISDIR(old_dentry->d_inode->i_mode)) { 
-                down(&old_dir->i_sb->s_vfs_rename_sem);
-                if (triple) {                   
-                        //                        triple_down(&old_dir->i_zombie,
-                        //                                  &new_dir->i_zombie,
-                        //                                  &new_dentry->d_inode->i_zombie);
-                } else { 
-                        //                        double_down(&old_dir->i_zombie,
-                        //                                  &new_dir->i_zombie);
-                }
-        } else /* this case is rename_other */
-                //                double_down(&old_dir->i_zombie, &new_dir->i_zombie);
-}
 
 
@@ -870,18 +800,16 @@
                 1:0;
 
-        presto_triple_unlock(old_dir, new_dir, old_dentry, new_dentry, triple); 
+        unlock_rename(new_dentry->d_parent, old_dentry->d_parent);
 
         if ( presto_get_permit(old_dir) < 0 ) {
                 EXIT;
-                presto_triple_fulllock(old_dir, new_dir, old_dentry, new_dentry, triple); 
                 return -EROFS;
         }
         if ( presto_get_permit(new_dir) < 0 ) {
                 EXIT;
-                presto_triple_fulllock(old_dir, new_dir, old_dentry, new_dentry, triple); 
                 return -EROFS;
         }
 
-        presto_triple_relock_sem(old_dir, new_dir, old_dentry, new_dentry, triple); 
+        lock_rename(new_dentry->d_parent, old_dentry->d_parent);
         memset(&info, 0, sizeof(info));
         if (!ISLENTO(presto_c2m(cache)))
@@ -890,5 +818,4 @@
         error = do_rename(fset, old_parent, old_dentry, new_parent,
                           new_dentry, &info);
-        presto_triple_relock_other(old_dir, new_dir, old_dentry, new_dentry, triple); 
 
         presto_put_permit(new_dir);



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
intermezzo-commit mailing list
intermezzo-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/intermezzo-commit
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic