git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git]
/
fs
/
ufs
/
namei.c
diff --git
a/fs/ufs/namei.c
b/fs/ufs/namei.c
index
d344b41
..
8d5f98a
100644
(file)
--- a/
fs/ufs/namei.c
+++ b/
fs/ufs/namei.c
@@
-1,9
+1,6
@@
/*
* linux/fs/ufs/namei.c
*
/*
* linux/fs/ufs/namei.c
*
- * Migration to usage of "page cache" on May 2006 by
- * Evgeniy Dushistov <dushistov@mail.ru> based on ext2 code base.
- *
* Copyright (C) 1998
* Daniel Pirkl <daniel.pirkl@email.cz>
* Charles University, Faculty of Mathematics and Physics
* Copyright (C) 1998
* Daniel Pirkl <daniel.pirkl@email.cz>
* Charles University, Faculty of Mathematics and Physics
@@
-31,9
+28,21
@@
#include <linux/fs.h>
#include <linux/ufs_fs.h>
#include <linux/smp_lock.h>
#include <linux/fs.h>
#include <linux/ufs_fs.h>
#include <linux/smp_lock.h>
+#include <linux/buffer_head.h>
#include "swab.h" /* will go away - see comment in mknod() */
#include "util.h"
#include "swab.h" /* will go away - see comment in mknod() */
#include "util.h"
+/*
+#undef UFS_NAMEI_DEBUG
+*/
+#define UFS_NAMEI_DEBUG
+
+#ifdef UFS_NAMEI_DEBUG
+#define UFSD(x) printk("(%s, %d), %s: ", __FILE__, __LINE__, __FUNCTION__); printk x;
+#else
+#define UFSD(x)
+#endif
+
static inline int ufs_add_nondir(struct dentry *dentry, struct inode *inode)
{
int err = ufs_add_link(dentry, inode);
static inline int ufs_add_nondir(struct dentry *dentry, struct inode *inode)
{
int err = ufs_add_link(dentry, inode);
@@
-79,13
+88,8
@@
static struct dentry *ufs_lookup(struct inode * dir, struct dentry *dentry, stru
static int ufs_create (struct inode * dir, struct dentry * dentry, int mode,
struct nameidata *nd)
{
static int ufs_create (struct inode * dir, struct dentry * dentry, int mode,
struct nameidata *nd)
{
- struct inode *inode;
- int err;
-
- UFSD("BEGIN\n");
- inode = ufs_new_inode(dir, mode);
- err = PTR_ERR(inode);
-
+ struct inode * inode = ufs_new_inode(dir, mode);
+ int err = PTR_ERR(inode);
if (!IS_ERR(inode)) {
inode->i_op = &ufs_file_inode_operations;
inode->i_fop = &ufs_file_operations;
if (!IS_ERR(inode)) {
inode->i_op = &ufs_file_inode_operations;
inode->i_fop = &ufs_file_operations;
@@
-95,7
+99,6
@@
static int ufs_create (struct inode * dir, struct dentry * dentry, int mode,
err = ufs_add_nondir(dentry, inode);
unlock_kernel();
}
err = ufs_add_nondir(dentry, inode);
unlock_kernel();
}
- UFSD("END: err=%d\n", err);
return err;
}
return err;
}
@@
-129,7
+132,7
@@
static int ufs_symlink (struct inode * dir, struct dentry * dentry,
struct inode * inode;
if (l > sb->s_blocksize)
struct inode * inode;
if (l > sb->s_blocksize)
- goto out
_notlocked
;
+ goto out;
lock_kernel();
inode = ufs_new_inode(dir, S_IFLNK | S_IRWXUGO);
lock_kernel();
inode = ufs_new_inode(dir, S_IFLNK | S_IRWXUGO);
@@
-155,7
+158,6
@@
static int ufs_symlink (struct inode * dir, struct dentry * dentry,
err = ufs_add_nondir(dentry, inode);
out:
unlock_kernel();
err = ufs_add_nondir(dentry, inode);
out:
unlock_kernel();
-out_notlocked:
return err;
out_fail:
return err;
out_fail:
@@
-203,7
+205,6
@@
static int ufs_mkdir(struct inode * dir, struct dentry * dentry, int mode)
inode->i_op = &ufs_dir_inode_operations;
inode->i_fop = &ufs_dir_operations;
inode->i_op = &ufs_dir_inode_operations;
inode->i_fop = &ufs_dir_operations;
- inode->i_mapping->a_ops = &ufs_aops;
inode_inc_link_count(inode);
inode_inc_link_count(inode);
@@
-230,18
+231,19
@@
out_dir:
goto out;
}
goto out;
}
-static int ufs_unlink(struct inode *dir, struct dentry *dentry)
+static int ufs_unlink(struct inode *
dir, struct dentry *dentry)
{
struct inode * inode = dentry->d_inode;
{
struct inode * inode = dentry->d_inode;
- struct
ufs_dir_entry *de
;
- struct
page *pag
e;
+ struct
buffer_head * bh
;
+ struct
ufs_dir_entry * d
e;
int err = -ENOENT;
int err = -ENOENT;
- de = ufs_find_entry(dir, dentry, &page);
+ lock_kernel();
+ de = ufs_find_entry (dentry, &bh);
if (!de)
goto out;
if (!de)
goto out;
- err = ufs_delete_entry
(dir, de, page
);
+ err = ufs_delete_entry
(dir, de, bh
);
if (err)
goto out;
if (err)
goto out;
@@
-249,6
+251,7
@@
static int ufs_unlink(struct inode *dir, struct dentry *dentry)
inode_dec_link_count(inode);
err = 0;
out:
inode_dec_link_count(inode);
err = 0;
out:
+ unlock_kernel();
return err;
}
return err;
}
@@
-270,42
+273,42
@@
static int ufs_rmdir (struct inode * dir, struct dentry *dentry)
return err;
}
return err;
}
-static int ufs_rename
(struct inode *old_dir, struct dentry *
old_dentry,
-
struct inode *new_dir, struct dentry *new_dentry
)
+static int ufs_rename
(struct inode * old_dir, struct dentry *
old_dentry,
+
struct inode * new_dir, struct dentry * new_dentry
)
{
struct inode *old_inode = old_dentry->d_inode;
struct inode *new_inode = new_dentry->d_inode;
{
struct inode *old_inode = old_dentry->d_inode;
struct inode *new_inode = new_dentry->d_inode;
- struct
page *dir_page
= NULL;
- struct ufs_dir_entry *
dir_de = NULL;
- struct
page *old_page
;
+ struct
buffer_head *dir_bh
= NULL;
+ struct ufs_dir_entry *dir_de = NULL;
+ struct
buffer_head *old_bh
;
struct ufs_dir_entry *old_de;
int err = -ENOENT;
struct ufs_dir_entry *old_de;
int err = -ENOENT;
- old_de = ufs_find_entry(old_dir, old_dentry, &old_page);
+ lock_kernel();
+ old_de = ufs_find_entry (old_dentry, &old_bh);
if (!old_de)
goto out;
if (S_ISDIR(old_inode->i_mode)) {
err = -EIO;
if (!old_de)
goto out;
if (S_ISDIR(old_inode->i_mode)) {
err = -EIO;
- dir_de = ufs_dotdot(old_inode, &dir_
page
);
+ dir_de = ufs_dotdot(old_inode, &dir_
bh
);
if (!dir_de)
goto out_old;
}
if (new_inode) {
if (!dir_de)
goto out_old;
}
if (new_inode) {
- struct
page *new_page
;
+ struct
buffer_head *new_bh
;
struct ufs_dir_entry *new_de;
err = -ENOTEMPTY;
struct ufs_dir_entry *new_de;
err = -ENOTEMPTY;
- if (dir_de && !ufs_empty_dir(new_inode))
+ if (dir_de && !ufs_empty_dir
(new_inode))
goto out_dir;
goto out_dir;
-
err = -ENOENT;
err = -ENOENT;
- new_de = ufs_find_entry
(new_dir, new_dentry, &new_page
);
+ new_de = ufs_find_entry
(new_dentry, &new_bh
);
if (!new_de)
goto out_dir;
inode_inc_link_count(old_inode);
if (!new_de)
goto out_dir;
inode_inc_link_count(old_inode);
- ufs_set_link(new_dir, new_de, new_
page
, old_inode);
+ ufs_set_link(new_dir, new_de, new_
bh
, old_inode);
new_inode->i_ctime = CURRENT_TIME_SEC;
if (dir_de)
new_inode->i_nlink--;
new_inode->i_ctime = CURRENT_TIME_SEC;
if (dir_de)
new_inode->i_nlink--;
@@
-326,32
+329,24
@@
static int ufs_rename(struct inode *old_dir, struct dentry *old_dentry,
inode_inc_link_count(new_dir);
}
inode_inc_link_count(new_dir);
}
- /*
- * Like most other Unix systems, set the ctime for inodes on a
- * rename.
- * inode_dec_link_count() will mark the inode dirty.
- */
- old_inode->i_ctime = CURRENT_TIME_SEC;
+ ufs_delete_entry (old_dir, old_de, old_bh);
- ufs_delete_entry(old_dir, old_de, old_page);
inode_dec_link_count(old_inode);
if (dir_de) {
inode_dec_link_count(old_inode);
if (dir_de) {
- ufs_set_link(old_inode, dir_de, dir_
page
, new_dir);
+ ufs_set_link(old_inode, dir_de, dir_
bh
, new_dir);
inode_dec_link_count(old_dir);
}
inode_dec_link_count(old_dir);
}
+ unlock_kernel();
return 0;
return 0;
-
out_dir:
out_dir:
- if (dir_de) {
- kunmap(dir_page);
- page_cache_release(dir_page);
- }
+ if (dir_de)
+ brelse(dir_bh);
out_old:
out_old:
- kunmap(old_page);
- page_cache_release(old_page);
+ brelse (old_bh);
out:
out:
+ unlock_kernel();
return err;
}
return err;
}