[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