Commit 06f3aee2 authored by Oleg Drokin's avatar Oleg Drokin

reiserfs_fs.h, super.c, namei.c, ioctl.c, inode.c, file.c, dir.c:

  reiserfs_write(un)lock introducion. Simple wrapper for now.
parent e47264da
...@@ -24,9 +24,10 @@ struct file_operations reiserfs_dir_operations = { ...@@ -24,9 +24,10 @@ struct file_operations reiserfs_dir_operations = {
}; };
int reiserfs_dir_fsync(struct file *filp, struct dentry *dentry, int datasync) { int reiserfs_dir_fsync(struct file *filp, struct dentry *dentry, int datasync) {
lock_kernel(); struct inode *inode = dentry->d_inode;
reiserfs_commit_for_inode(dentry->d_inode) ; reiserfs_write_lock(inode->i_sb);
unlock_kernel() ; reiserfs_commit_for_inode(inode) ;
reiserfs_write_unlock(inode->i_sb) ;
return 0 ; return 0 ;
} }
...@@ -50,7 +51,7 @@ static int reiserfs_readdir (struct file * filp, void * dirent, filldir_t filldi ...@@ -50,7 +51,7 @@ static int reiserfs_readdir (struct file * filp, void * dirent, filldir_t filldi
struct reiserfs_dir_entry de; struct reiserfs_dir_entry de;
int ret = 0; int ret = 0;
lock_kernel(); reiserfs_write_lock(inode->i_sb);
reiserfs_check_lock_depth("readdir") ; reiserfs_check_lock_depth("readdir") ;
...@@ -186,7 +187,7 @@ static int reiserfs_readdir (struct file * filp, void * dirent, filldir_t filldi ...@@ -186,7 +187,7 @@ static int reiserfs_readdir (struct file * filp, void * dirent, filldir_t filldi
reiserfs_check_path(&path_to_entry) ; reiserfs_check_path(&path_to_entry) ;
UPDATE_ATIME(inode) ; UPDATE_ATIME(inode) ;
out: out:
unlock_kernel(); reiserfs_write_unlock(inode->i_sb);
return ret; return ret;
} }
......
...@@ -39,7 +39,7 @@ static int reiserfs_file_release (struct inode * inode, struct file * filp) ...@@ -39,7 +39,7 @@ static int reiserfs_file_release (struct inode * inode, struct file * filp)
return 0; return 0;
} }
lock_kernel() ; reiserfs_write_lock(inode->i_sb);
down (&inode->i_sem); down (&inode->i_sem);
journal_begin(&th, inode->i_sb, JOURNAL_PER_BALANCE_CNT * 3) ; journal_begin(&th, inode->i_sb, JOURNAL_PER_BALANCE_CNT * 3) ;
reiserfs_update_inode_transaction(inode) ; reiserfs_update_inode_transaction(inode) ;
...@@ -61,7 +61,7 @@ static int reiserfs_file_release (struct inode * inode, struct file * filp) ...@@ -61,7 +61,7 @@ static int reiserfs_file_release (struct inode * inode, struct file * filp)
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
} }
up (&inode->i_sem); up (&inode->i_sem);
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
return 0; return 0;
} }
...@@ -84,21 +84,21 @@ static int reiserfs_sync_file( ...@@ -84,21 +84,21 @@ static int reiserfs_sync_file(
struct inode * p_s_inode = p_s_dentry->d_inode; struct inode * p_s_inode = p_s_dentry->d_inode;
int n_err; int n_err;
lock_kernel() ; reiserfs_write_lock(p_s_inode->i_sb);
if (!S_ISREG(p_s_inode->i_mode)) if (!S_ISREG(p_s_inode->i_mode))
BUG (); BUG ();
n_err = sync_mapping_buffers(p_s_inode->i_mapping) ; n_err = sync_mapping_buffers(p_s_inode->i_mapping) ;
reiserfs_commit_for_inode(p_s_inode) ; reiserfs_commit_for_inode(p_s_inode) ;
unlock_kernel() ; reiserfs_write_unlock(p_s_inode->i_sb);
return ( n_err < 0 ) ? -EIO : 0; return ( n_err < 0 ) ? -EIO : 0;
} }
static int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) { static int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) {
struct inode *inode = dentry->d_inode ; struct inode *inode = dentry->d_inode ;
int error ; int error ;
lock_kernel(); reiserfs_write_lock(inode->i_sb);
if (attr->ia_valid & ATTR_SIZE) { if (attr->ia_valid & ATTR_SIZE) {
/* version 2 items will be caught by the s_maxbytes check /* version 2 items will be caught by the s_maxbytes check
** done for us in vmtruncate ** done for us in vmtruncate
...@@ -136,7 +136,7 @@ static int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) { ...@@ -136,7 +136,7 @@ static int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) {
inode_setattr(inode, attr) ; inode_setattr(inode, attr) ;
out: out:
unlock_kernel(); reiserfs_write_unlock(inode->i_sb);
return error ; return error ;
} }
......
...@@ -28,7 +28,7 @@ void reiserfs_delete_inode (struct inode * inode) ...@@ -28,7 +28,7 @@ void reiserfs_delete_inode (struct inode * inode)
struct reiserfs_transaction_handle th ; struct reiserfs_transaction_handle th ;
lock_kernel() ; reiserfs_write_lock(inode->i_sb);
/* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */ /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */
if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) { /* also handles bad_inode case */ if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) { /* also handles bad_inode case */
...@@ -53,7 +53,7 @@ void reiserfs_delete_inode (struct inode * inode) ...@@ -53,7 +53,7 @@ void reiserfs_delete_inode (struct inode * inode)
} }
clear_inode (inode); /* note this must go after the journal_end to prevent deadlock */ clear_inode (inode); /* note this must go after the journal_end to prevent deadlock */
inode->i_blocks = 0; inode->i_blocks = 0;
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
} }
static void _make_cpu_key (struct cpu_key * key, int version, __u32 dirid, __u32 objectid, static void _make_cpu_key (struct cpu_key * key, int version, __u32 dirid, __u32 objectid,
...@@ -408,10 +408,10 @@ int reiserfs_bmap (struct inode * inode, sector_t block, ...@@ -408,10 +408,10 @@ int reiserfs_bmap (struct inode * inode, sector_t block,
if (!file_capable (inode, block)) if (!file_capable (inode, block))
return -EFBIG; return -EFBIG;
lock_kernel() ; reiserfs_write_lock(inode->i_sb);
/* do not read the direct item */ /* do not read the direct item */
_get_block_create_0 (inode, block, bh_result, 0) ; _get_block_create_0 (inode, block, bh_result, 0) ;
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
return 0; return 0;
} }
...@@ -545,17 +545,17 @@ int reiserfs_get_block (struct inode * inode, sector_t block, ...@@ -545,17 +545,17 @@ int reiserfs_get_block (struct inode * inode, sector_t block,
loff_t new_offset = (((loff_t)block) << inode->i_sb->s_blocksize_bits) + 1 ; loff_t new_offset = (((loff_t)block) << inode->i_sb->s_blocksize_bits) + 1 ;
/* bad.... */ /* bad.... */
lock_kernel() ; reiserfs_write_lock(inode->i_sb);
th.t_trans_id = 0 ; th.t_trans_id = 0 ;
version = get_inode_item_key_version (inode); version = get_inode_item_key_version (inode);
if (block < 0) { if (block < 0) {
unlock_kernel(); reiserfs_write_unlock(inode->i_sb);
return -EIO; return -EIO;
} }
if (!file_capable (inode, block)) { if (!file_capable (inode, block)) {
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
return -EFBIG; return -EFBIG;
} }
...@@ -567,7 +567,7 @@ int reiserfs_get_block (struct inode * inode, sector_t block, ...@@ -567,7 +567,7 @@ int reiserfs_get_block (struct inode * inode, sector_t block,
/* find number of block-th logical block of the file */ /* find number of block-th logical block of the file */
ret = _get_block_create_0 (inode, block, bh_result, ret = _get_block_create_0 (inode, block, bh_result,
create | GET_BLOCK_READ_DIRECT) ; create | GET_BLOCK_READ_DIRECT) ;
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
return ret; return ret;
} }
...@@ -658,7 +658,7 @@ int reiserfs_get_block (struct inode * inode, sector_t block, ...@@ -658,7 +658,7 @@ int reiserfs_get_block (struct inode * inode, sector_t block,
if (transaction_started) if (transaction_started)
journal_end(&th, inode->i_sb, jbegin_count) ; journal_end(&th, inode->i_sb, jbegin_count) ;
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
/* the item was found, so new blocks were not added to the file /* the item was found, so new blocks were not added to the file
** there is no need to make sure the inode is updated with this ** there is no need to make sure the inode is updated with this
...@@ -857,7 +857,6 @@ int reiserfs_get_block (struct inode * inode, sector_t block, ...@@ -857,7 +857,6 @@ int reiserfs_get_block (struct inode * inode, sector_t block,
retval = 0; retval = 0;
reiserfs_check_path(&path) ;
failure: failure:
if (transaction_started) { if (transaction_started) {
...@@ -865,7 +864,7 @@ int reiserfs_get_block (struct inode * inode, sector_t block, ...@@ -865,7 +864,7 @@ int reiserfs_get_block (struct inode * inode, sector_t block,
journal_end(&th, inode->i_sb, jbegin_count) ; journal_end(&th, inode->i_sb, jbegin_count) ;
} }
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
reiserfs_check_path(&path) ; reiserfs_check_path(&path) ;
return retval; return retval;
} }
...@@ -1366,11 +1365,11 @@ void reiserfs_write_inode (struct inode * inode, int do_sync) { ...@@ -1366,11 +1365,11 @@ void reiserfs_write_inode (struct inode * inode, int do_sync) {
** ignored because the altered inode has already been logged. ** ignored because the altered inode has already been logged.
*/ */
if (do_sync && !(current->flags & PF_MEMALLOC)) { if (do_sync && !(current->flags & PF_MEMALLOC)) {
lock_kernel() ; reiserfs_write_lock(inode->i_sb);
journal_begin(&th, inode->i_sb, jbegin_count) ; journal_begin(&th, inode->i_sb, jbegin_count) ;
reiserfs_update_sd (&th, inode); reiserfs_update_sd (&th, inode);
journal_end_sync(&th, inode->i_sb, jbegin_count) ; journal_end_sync(&th, inode->i_sb, jbegin_count) ;
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
} }
} }
...@@ -1746,7 +1745,7 @@ void reiserfs_truncate_file(struct inode *p_s_inode, int update_timestamps) { ...@@ -1746,7 +1745,7 @@ void reiserfs_truncate_file(struct inode *p_s_inode, int update_timestamps) {
int error ; int error ;
struct buffer_head *bh = NULL ; struct buffer_head *bh = NULL ;
lock_kernel (); reiserfs_write_lock(p_s_inode->i_sb);
if (p_s_inode->i_size > 0) { if (p_s_inode->i_size > 0) {
if ((error = grab_tail_page(p_s_inode, &page, &bh))) { if ((error = grab_tail_page(p_s_inode, &page, &bh))) {
...@@ -1801,7 +1800,7 @@ void reiserfs_truncate_file(struct inode *p_s_inode, int update_timestamps) { ...@@ -1801,7 +1800,7 @@ void reiserfs_truncate_file(struct inode *p_s_inode, int update_timestamps) {
page_cache_release(page) ; page_cache_release(page) ;
} }
unlock_kernel (); reiserfs_write_unlock(p_s_inode->i_sb);
} }
static int map_block_for_writepage(struct inode *inode, static int map_block_for_writepage(struct inode *inode,
...@@ -1825,7 +1824,7 @@ static int map_block_for_writepage(struct inode *inode, ...@@ -1825,7 +1824,7 @@ static int map_block_for_writepage(struct inode *inode,
kmap(bh_result->b_page) ; kmap(bh_result->b_page) ;
start_over: start_over:
lock_kernel() ; reiserfs_write_lock(inode->i_sb);
journal_begin(&th, inode->i_sb, jbegin_count) ; journal_begin(&th, inode->i_sb, jbegin_count) ;
reiserfs_update_inode_transaction(inode) ; reiserfs_update_inode_transaction(inode) ;
...@@ -1892,7 +1891,7 @@ static int map_block_for_writepage(struct inode *inode, ...@@ -1892,7 +1891,7 @@ static int map_block_for_writepage(struct inode *inode,
out: out:
pathrelse(&path) ; pathrelse(&path) ;
journal_end(&th, inode->i_sb, jbegin_count) ; journal_end(&th, inode->i_sb, jbegin_count) ;
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
/* this is where we fill in holes in the file. */ /* this is where we fill in holes in the file. */
if (use_get_block) { if (use_get_block) {
...@@ -2064,13 +2063,13 @@ static int reiserfs_commit_write(struct file *f, struct page *page, ...@@ -2064,13 +2063,13 @@ static int reiserfs_commit_write(struct file *f, struct page *page,
*/ */
if (pos > inode->i_size) { if (pos > inode->i_size) {
struct reiserfs_transaction_handle th ; struct reiserfs_transaction_handle th ;
lock_kernel() ; reiserfs_write_lock(inode->i_sb);
journal_begin(&th, inode->i_sb, 1) ; journal_begin(&th, inode->i_sb, 1) ;
reiserfs_update_inode_transaction(inode) ; reiserfs_update_inode_transaction(inode) ;
inode->i_size = pos ; inode->i_size = pos ;
reiserfs_update_sd(&th, inode) ; reiserfs_update_sd(&th, inode) ;
journal_end(&th, inode->i_sb, 1) ; journal_end(&th, inode->i_sb, 1) ;
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
} }
ret = generic_commit_write(f, page, from, to) ; ret = generic_commit_write(f, page, from, to) ;
...@@ -2079,9 +2078,9 @@ static int reiserfs_commit_write(struct file *f, struct page *page, ...@@ -2079,9 +2078,9 @@ static int reiserfs_commit_write(struct file *f, struct page *page,
** for any packed tails the file might have had ** for any packed tails the file might have had
*/ */
if (f && (f->f_flags & O_SYNC)) { if (f && (f->f_flags & O_SYNC)) {
lock_kernel() ; reiserfs_write_lock(inode->i_sb);
reiserfs_commit_for_inode(inode) ; reiserfs_commit_for_inode(inode) ;
unlock_kernel(); reiserfs_write_unlock(inode->i_sb);
} }
return ret ; return ret ;
} }
......
...@@ -49,7 +49,7 @@ int reiserfs_unpack (struct inode * inode, struct file * filp) ...@@ -49,7 +49,7 @@ int reiserfs_unpack (struct inode * inode, struct file * filp)
if (REISERFS_I(inode)->i_flags & i_nopack_mask) { if (REISERFS_I(inode)->i_flags & i_nopack_mask) {
return 0 ; return 0 ;
} }
lock_kernel(); reiserfs_write_lock(inode->i_sb);
/* we need to make sure nobody is changing the file size beneath /* we need to make sure nobody is changing the file size beneath
** us ** us
...@@ -88,6 +88,6 @@ int reiserfs_unpack (struct inode * inode, struct file * filp) ...@@ -88,6 +88,6 @@ int reiserfs_unpack (struct inode * inode, struct file * filp)
out: out:
up(&inode->i_sem) ; up(&inode->i_sem) ;
unlock_kernel(); reiserfs_write_unlock(inode->i_sb);
return retval; return retval;
} }
...@@ -326,18 +326,18 @@ static struct dentry * reiserfs_lookup (struct inode * dir, struct dentry * dent ...@@ -326,18 +326,18 @@ static struct dentry * reiserfs_lookup (struct inode * dir, struct dentry * dent
if (REISERFS_MAX_NAME (dir->i_sb->s_blocksize) < dentry->d_name.len) if (REISERFS_MAX_NAME (dir->i_sb->s_blocksize) < dentry->d_name.len)
return ERR_PTR(-ENAMETOOLONG); return ERR_PTR(-ENAMETOOLONG);
lock_kernel(); reiserfs_write_lock(dir->i_sb);
de.de_gen_number_bit_string = 0; de.de_gen_number_bit_string = 0;
retval = reiserfs_find_entry (dir, dentry->d_name.name, dentry->d_name.len, &path_to_entry, &de); retval = reiserfs_find_entry (dir, dentry->d_name.name, dentry->d_name.len, &path_to_entry, &de);
pathrelse (&path_to_entry); pathrelse (&path_to_entry);
if (retval == NAME_FOUND) { if (retval == NAME_FOUND) {
inode = reiserfs_iget (dir->i_sb, (struct cpu_key *)&(de.de_dir_id)); inode = reiserfs_iget (dir->i_sb, (struct cpu_key *)&(de.de_dir_id));
if (!inode || IS_ERR(inode)) { if (!inode || IS_ERR(inode)) {
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return ERR_PTR(-EACCES); return ERR_PTR(-EACCES);
} }
} }
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
if ( retval == IO_ERROR ) { if ( retval == IO_ERROR ) {
return ERR_PTR(-EIO); return ERR_PTR(-EIO);
} }
...@@ -369,15 +369,15 @@ struct dentry *reiserfs_get_parent(struct dentry *child) ...@@ -369,15 +369,15 @@ struct dentry *reiserfs_get_parent(struct dentry *child)
} }
de.de_gen_number_bit_string = 0; de.de_gen_number_bit_string = 0;
lock_kernel(); reiserfs_write_lock(dir->i_sb);
retval = reiserfs_find_entry (dir, "..", 2, &path_to_entry, &de); retval = reiserfs_find_entry (dir, "..", 2, &path_to_entry, &de);
pathrelse (&path_to_entry); pathrelse (&path_to_entry);
if (retval != NAME_FOUND) { if (retval != NAME_FOUND) {
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return ERR_PTR(-ENOENT); return ERR_PTR(-ENOENT);
} }
inode = reiserfs_iget (dir->i_sb, (struct cpu_key *)&(de.de_dir_id)); inode = reiserfs_iget (dir->i_sb, (struct cpu_key *)&(de.de_dir_id));
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
if (!inode || IS_ERR(inode)) { if (!inode || IS_ERR(inode)) {
return ERR_PTR(-EACCES); return ERR_PTR(-EACCES);
...@@ -572,7 +572,7 @@ static int reiserfs_create (struct inode * dir, struct dentry *dentry, int mode) ...@@ -572,7 +572,7 @@ static int reiserfs_create (struct inode * dir, struct dentry *dentry, int mode)
if (retval) if (retval)
return retval; return retval;
lock_kernel(); reiserfs_write_lock(dir->i_sb);
journal_begin(&th, dir->i_sb, jbegin_count) ; journal_begin(&th, dir->i_sb, jbegin_count) ;
th.t_caller = "create" ; th.t_caller = "create" ;
retval = reiserfs_new_inode (&th, dir, mode, 0, 0/*i_size*/, dentry, inode); retval = reiserfs_new_inode (&th, dir, mode, 0, 0/*i_size*/, dentry, inode);
...@@ -600,7 +600,7 @@ static int reiserfs_create (struct inode * dir, struct dentry *dentry, int mode) ...@@ -600,7 +600,7 @@ static int reiserfs_create (struct inode * dir, struct dentry *dentry, int mode)
journal_end(&th, dir->i_sb, jbegin_count) ; journal_end(&th, dir->i_sb, jbegin_count) ;
out_failed: out_failed:
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return retval; return retval;
} }
...@@ -619,7 +619,7 @@ static int reiserfs_mknod (struct inode * dir, struct dentry *dentry, int mode, ...@@ -619,7 +619,7 @@ static int reiserfs_mknod (struct inode * dir, struct dentry *dentry, int mode,
if (retval) if (retval)
return retval; return retval;
lock_kernel(); reiserfs_write_lock(dir->i_sb);
journal_begin(&th, dir->i_sb, jbegin_count) ; journal_begin(&th, dir->i_sb, jbegin_count) ;
retval = reiserfs_new_inode (&th, dir, mode, 0, 0/*i_size*/, dentry, inode); retval = reiserfs_new_inode (&th, dir, mode, 0, 0/*i_size*/, dentry, inode);
...@@ -649,7 +649,7 @@ static int reiserfs_mknod (struct inode * dir, struct dentry *dentry, int mode, ...@@ -649,7 +649,7 @@ static int reiserfs_mknod (struct inode * dir, struct dentry *dentry, int mode,
journal_end(&th, dir->i_sb, jbegin_count) ; journal_end(&th, dir->i_sb, jbegin_count) ;
out_failed: out_failed:
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return retval; return retval;
} }
...@@ -669,7 +669,7 @@ static int reiserfs_mkdir (struct inode * dir, struct dentry *dentry, int mode) ...@@ -669,7 +669,7 @@ static int reiserfs_mkdir (struct inode * dir, struct dentry *dentry, int mode)
if (retval) if (retval)
return retval; return retval;
lock_kernel(); reiserfs_write_lock(dir->i_sb);
journal_begin(&th, dir->i_sb, jbegin_count) ; journal_begin(&th, dir->i_sb, jbegin_count) ;
/* inc the link count now, so another writer doesn't overflow it while /* inc the link count now, so another writer doesn't overflow it while
...@@ -709,7 +709,7 @@ static int reiserfs_mkdir (struct inode * dir, struct dentry *dentry, int mode) ...@@ -709,7 +709,7 @@ static int reiserfs_mkdir (struct inode * dir, struct dentry *dentry, int mode)
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
journal_end(&th, dir->i_sb, jbegin_count) ; journal_end(&th, dir->i_sb, jbegin_count) ;
out_failed: out_failed:
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return retval; return retval;
} }
...@@ -740,7 +740,7 @@ static int reiserfs_rmdir (struct inode * dir, struct dentry *dentry) ...@@ -740,7 +740,7 @@ static int reiserfs_rmdir (struct inode * dir, struct dentry *dentry)
/* we will be doing 2 balancings and update 2 stat data */ /* we will be doing 2 balancings and update 2 stat data */
jbegin_count = JOURNAL_PER_BALANCE_CNT * 2 + 2; jbegin_count = JOURNAL_PER_BALANCE_CNT * 2 + 2;
lock_kernel(); reiserfs_write_lock(dir->i_sb);
journal_begin(&th, dir->i_sb, jbegin_count) ; journal_begin(&th, dir->i_sb, jbegin_count) ;
windex = push_journal_writer("reiserfs_rmdir") ; windex = push_journal_writer("reiserfs_rmdir") ;
...@@ -794,7 +794,7 @@ static int reiserfs_rmdir (struct inode * dir, struct dentry *dentry) ...@@ -794,7 +794,7 @@ static int reiserfs_rmdir (struct inode * dir, struct dentry *dentry)
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
journal_end(&th, dir->i_sb, jbegin_count) ; journal_end(&th, dir->i_sb, jbegin_count) ;
reiserfs_check_path(&path) ; reiserfs_check_path(&path) ;
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return 0; return 0;
end_rmdir: end_rmdir:
...@@ -804,7 +804,7 @@ static int reiserfs_rmdir (struct inode * dir, struct dentry *dentry) ...@@ -804,7 +804,7 @@ static int reiserfs_rmdir (struct inode * dir, struct dentry *dentry)
pathrelse (&path); pathrelse (&path);
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
journal_end(&th, dir->i_sb, jbegin_count) ; journal_end(&th, dir->i_sb, jbegin_count) ;
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return retval; return retval;
} }
...@@ -824,7 +824,7 @@ static int reiserfs_unlink (struct inode * dir, struct dentry *dentry) ...@@ -824,7 +824,7 @@ static int reiserfs_unlink (struct inode * dir, struct dentry *dentry)
two stat datas */ two stat datas */
jbegin_count = JOURNAL_PER_BALANCE_CNT * 2 + 2; jbegin_count = JOURNAL_PER_BALANCE_CNT * 2 + 2;
lock_kernel(); reiserfs_write_lock(dir->i_sb);
journal_begin(&th, dir->i_sb, jbegin_count) ; journal_begin(&th, dir->i_sb, jbegin_count) ;
windex = push_journal_writer("reiserfs_unlink") ; windex = push_journal_writer("reiserfs_unlink") ;
...@@ -873,7 +873,7 @@ static int reiserfs_unlink (struct inode * dir, struct dentry *dentry) ...@@ -873,7 +873,7 @@ static int reiserfs_unlink (struct inode * dir, struct dentry *dentry)
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
journal_end(&th, dir->i_sb, jbegin_count) ; journal_end(&th, dir->i_sb, jbegin_count) ;
reiserfs_check_path(&path) ; reiserfs_check_path(&path) ;
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return 0; return 0;
end_unlink: end_unlink:
...@@ -881,7 +881,7 @@ static int reiserfs_unlink (struct inode * dir, struct dentry *dentry) ...@@ -881,7 +881,7 @@ static int reiserfs_unlink (struct inode * dir, struct dentry *dentry)
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
journal_end(&th, dir->i_sb, jbegin_count) ; journal_end(&th, dir->i_sb, jbegin_count) ;
reiserfs_check_path(&path) ; reiserfs_check_path(&path) ;
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return retval; return retval;
} }
...@@ -904,7 +904,7 @@ static int reiserfs_symlink (struct inode * parent_dir, ...@@ -904,7 +904,7 @@ static int reiserfs_symlink (struct inode * parent_dir,
return retval; return retval;
} }
lock_kernel(); reiserfs_write_lock(parent_dir->i_sb);
item_len = ROUND_UP (strlen (symname)); item_len = ROUND_UP (strlen (symname));
if (item_len > MAX_DIRECT_ITEM_LEN (parent_dir->i_sb->s_blocksize)) { if (item_len > MAX_DIRECT_ITEM_LEN (parent_dir->i_sb->s_blocksize)) {
retval = -ENAMETOOLONG; retval = -ENAMETOOLONG;
...@@ -953,7 +953,7 @@ static int reiserfs_symlink (struct inode * parent_dir, ...@@ -953,7 +953,7 @@ static int reiserfs_symlink (struct inode * parent_dir,
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
journal_end(&th, parent_dir->i_sb, jbegin_count) ; journal_end(&th, parent_dir->i_sb, jbegin_count) ;
out_failed: out_failed:
unlock_kernel(); reiserfs_write_unlock(parent_dir->i_sb);
return retval; return retval;
} }
...@@ -966,10 +966,10 @@ static int reiserfs_link (struct dentry * old_dentry, struct inode * dir, struct ...@@ -966,10 +966,10 @@ static int reiserfs_link (struct dentry * old_dentry, struct inode * dir, struct
int jbegin_count = JOURNAL_PER_BALANCE_CNT * 3; int jbegin_count = JOURNAL_PER_BALANCE_CNT * 3;
time_t ctime; time_t ctime;
lock_kernel(); reiserfs_write_lock(dir->i_sb);
if (inode->i_nlink >= REISERFS_LINK_MAX) { if (inode->i_nlink >= REISERFS_LINK_MAX) {
//FIXME: sd_nlink is 32 bit for new files //FIXME: sd_nlink is 32 bit for new files
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return -EMLINK; return -EMLINK;
} }
...@@ -986,7 +986,7 @@ static int reiserfs_link (struct dentry * old_dentry, struct inode * dir, struct ...@@ -986,7 +986,7 @@ static int reiserfs_link (struct dentry * old_dentry, struct inode * dir, struct
if (retval) { if (retval) {
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
journal_end(&th, dir->i_sb, jbegin_count) ; journal_end(&th, dir->i_sb, jbegin_count) ;
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return retval; return retval;
} }
...@@ -999,7 +999,7 @@ static int reiserfs_link (struct dentry * old_dentry, struct inode * dir, struct ...@@ -999,7 +999,7 @@ static int reiserfs_link (struct dentry * old_dentry, struct inode * dir, struct
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
journal_end(&th, dir->i_sb, jbegin_count) ; journal_end(&th, dir->i_sb, jbegin_count) ;
unlock_kernel(); reiserfs_write_unlock(dir->i_sb);
return 0; return 0;
} }
...@@ -1079,17 +1079,17 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -1079,17 +1079,17 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry,
// make sure, that oldname still exists and points to an object we // make sure, that oldname still exists and points to an object we
// are going to rename // are going to rename
old_de.de_gen_number_bit_string = 0; old_de.de_gen_number_bit_string = 0;
lock_kernel(); reiserfs_write_lock(old_dir->i_sb);
retval = reiserfs_find_entry (old_dir, old_dentry->d_name.name, old_dentry->d_name.len, retval = reiserfs_find_entry (old_dir, old_dentry->d_name.name, old_dentry->d_name.len,
&old_entry_path, &old_de); &old_entry_path, &old_de);
pathrelse (&old_entry_path); pathrelse (&old_entry_path);
if (retval == IO_ERROR) { if (retval == IO_ERROR) {
unlock_kernel(); reiserfs_write_unlock(old_dir->i_sb);
return -EIO; return -EIO;
} }
if (retval != NAME_FOUND || old_de.de_objectid != old_inode->i_ino) { if (retval != NAME_FOUND || old_de.de_objectid != old_inode->i_ino) {
unlock_kernel(); reiserfs_write_unlock(old_dir->i_sb);
return -ENOENT; return -ENOENT;
} }
...@@ -1101,7 +1101,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -1101,7 +1101,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry,
if (new_dentry_inode) { if (new_dentry_inode) {
if (!reiserfs_empty_dir(new_dentry_inode)) { if (!reiserfs_empty_dir(new_dentry_inode)) {
unlock_kernel(); reiserfs_write_unlock(old_dir->i_sb);
return -ENOTEMPTY; return -ENOTEMPTY;
} }
} }
...@@ -1113,13 +1113,13 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -1113,13 +1113,13 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry,
retval = reiserfs_find_entry (old_inode, "..", 2, &dot_dot_entry_path, &dot_dot_de); retval = reiserfs_find_entry (old_inode, "..", 2, &dot_dot_entry_path, &dot_dot_de);
pathrelse (&dot_dot_entry_path); pathrelse (&dot_dot_entry_path);
if (retval != NAME_FOUND) { if (retval != NAME_FOUND) {
unlock_kernel(); reiserfs_write_unlock(old_dir->i_sb);
return -EIO; return -EIO;
} }
/* inode number of .. must equal old_dir->i_ino */ /* inode number of .. must equal old_dir->i_ino */
if (dot_dot_de.de_objectid != old_dir->i_ino) { if (dot_dot_de.de_objectid != old_dir->i_ino) {
unlock_kernel(); reiserfs_write_unlock(old_dir->i_sb);
return -EIO; return -EIO;
} }
} }
...@@ -1138,7 +1138,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -1138,7 +1138,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry,
} else if (retval) { } else if (retval) {
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
journal_end(&th, old_dir->i_sb, jbegin_count) ; journal_end(&th, old_dir->i_sb, jbegin_count) ;
unlock_kernel(); reiserfs_write_unlock(old_dir->i_sb);
return retval; return retval;
} }
...@@ -1286,7 +1286,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -1286,7 +1286,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry,
pop_journal_writer(windex) ; pop_journal_writer(windex) ;
journal_end(&th, old_dir->i_sb, jbegin_count) ; journal_end(&th, old_dir->i_sb, jbegin_count) ;
unlock_kernel(); reiserfs_write_unlock(old_dir->i_sb);
return 0; return 0;
} }
......
...@@ -69,12 +69,12 @@ static void reiserfs_write_super (struct super_block * s) ...@@ -69,12 +69,12 @@ static void reiserfs_write_super (struct super_block * s)
{ {
int dirty = 0 ; int dirty = 0 ;
lock_kernel() ; reiserfs_write_lock(s);
if (!(s->s_flags & MS_RDONLY)) { if (!(s->s_flags & MS_RDONLY)) {
dirty = flush_old_commits(s, 1) ; dirty = flush_old_commits(s, 1) ;
} }
s->s_dirt = dirty; s->s_dirt = dirty;
unlock_kernel() ; reiserfs_write_unlock(s);
} }
static void reiserfs_write_super_lockfs (struct super_block * s) static void reiserfs_write_super_lockfs (struct super_block * s)
...@@ -82,7 +82,7 @@ static void reiserfs_write_super_lockfs (struct super_block * s) ...@@ -82,7 +82,7 @@ static void reiserfs_write_super_lockfs (struct super_block * s)
int dirty = 0 ; int dirty = 0 ;
struct reiserfs_transaction_handle th ; struct reiserfs_transaction_handle th ;
lock_kernel() ; reiserfs_write_lock(s);
if (!(s->s_flags & MS_RDONLY)) { if (!(s->s_flags & MS_RDONLY)) {
journal_begin(&th, s, 1) ; journal_begin(&th, s, 1) ;
reiserfs_prepare_for_journal(s, SB_BUFFER_WITH_SB(s), 1); reiserfs_prepare_for_journal(s, SB_BUFFER_WITH_SB(s), 1);
...@@ -91,7 +91,7 @@ static void reiserfs_write_super_lockfs (struct super_block * s) ...@@ -91,7 +91,7 @@ static void reiserfs_write_super_lockfs (struct super_block * s)
journal_end(&th, s, 1) ; journal_end(&th, s, 1) ;
} }
s->s_dirt = dirty; s->s_dirt = dirty;
unlock_kernel() ; reiserfs_write_unlock(s);
} }
void reiserfs_unlockfs(struct super_block *s) { void reiserfs_unlockfs(struct super_block *s) {
...@@ -455,7 +455,7 @@ static void reiserfs_dirty_inode (struct inode * inode) { ...@@ -455,7 +455,7 @@ static void reiserfs_dirty_inode (struct inode * inode) {
inode->i_ino) ; inode->i_ino) ;
return ; return ;
} }
lock_kernel() ; reiserfs_write_lock(inode->i_sb);
/* this is really only used for atime updates, so they don't have /* this is really only used for atime updates, so they don't have
** to be included in O_SYNC or fsync ** to be included in O_SYNC or fsync
...@@ -463,7 +463,7 @@ static void reiserfs_dirty_inode (struct inode * inode) { ...@@ -463,7 +463,7 @@ static void reiserfs_dirty_inode (struct inode * inode) {
journal_begin(&th, inode->i_sb, 1) ; journal_begin(&th, inode->i_sb, 1) ;
reiserfs_update_sd (&th, inode); reiserfs_update_sd (&th, inode);
journal_end(&th, inode->i_sb, 1) ; journal_end(&th, inode->i_sb, 1) ;
unlock_kernel() ; reiserfs_write_unlock(inode->i_sb);
} }
struct super_operations reiserfs_sops = struct super_operations reiserfs_sops =
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <asm/unaligned.h> #include <asm/unaligned.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/smp_lock.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/reiserfs_fs_i.h> #include <linux/reiserfs_fs_i.h>
#include <linux/reiserfs_fs_sb.h> #include <linux/reiserfs_fs_sb.h>
...@@ -2077,6 +2078,12 @@ int reiserfs_unpack (struct inode * inode, struct file * filp); ...@@ -2077,6 +2078,12 @@ int reiserfs_unpack (struct inode * inode, struct file * filp);
/* ioctl's command */ /* ioctl's command */
#define REISERFS_IOC_UNPACK _IOW(0xCD,1,long) #define REISERFS_IOC_UNPACK _IOW(0xCD,1,long)
/* Locking primitives */
/* Right now we are still falling back to (un)lock_kernel, but eventually that
would evolve into real per-fs locks */
#define reiserfs_write_lock( sb ) lock_kernel()
#define reiserfs_write_unlock( sb ) unlock_kernel()
#endif /* _LINUX_REISER_FS_H */ #endif /* _LINUX_REISER_FS_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment