sysv: remove lock/unlock super
PATCH 7/8 sysv: remove lock/unlock super
From: Marco Stornelli <[email protected]>
Replaced lock and unlock super with a new fs mutex s_lock.
Signed-off-by Marco Stornelli <[email protected]>
---
fs/sysv/balloc.c +9 -9
@@ -60,12 +60,12 @@ void sysv_free_block(struct super_blockreturn ; } -lock_super (sb); +mutex_lock (&sbi->s_lock); count =fs16_to_cpu (sbi, *sbi->s_bcache_count);if (count > sbi->s_flc_size) {printk ("sysv_free_block: flc_count > flc_size\n" ); -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return ; }/* If the free list head in super-block is full, it is copied
@@ -77,7 +77,7 @@ void sysv_free_block(struct super_block bh =sb_getblk (sb, block);if (!bh) {printk ("sysv_free_block: getblk() failed\n" ); -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return ; }memset (bh->b_data,0 , sb->s_blocksize);
@@ -93,7 +93,7 @@ void sysv_free_block(struct super_block *sbi->s_bcache_count =cpu_to_fs16 (sbi, count);fs32_add (sbi, sbi->s_free_blocks,1 );dirty_sb (sb); -unlock_super (sb); +mutex_unlock (&sbi->s_lock); }sysv_zone_t sysv_new_block (struct super_block * sb)
@@ -104,7 +104,7 @@ sysv_zone_t sysv_new_block(struct super_struct buffer_head * bh;unsigned count; -lock_super (sb); +mutex_lock (&sbi->s_lock); count =fs16_to_cpu (sbi, *sbi->s_bcache_count);if (count ==0 )/* Applies only to Coherent FS */
@@ -147,11 +147,11 @@ sysv_zone_t sysv_new_block(struct super_/* Now the free list head in the superblock is valid again. */ fs32_add (sbi, sbi->s_free_blocks,-1 );dirty_sb (sb); -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return nr; Enospc: -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return 0 ; }
@@ -173,7 +173,7 @@ unsigned long sysv_count_free_blocks(strif (sbi->s_type ==FSTYPE_AFS )return 0 ; -lock_super (sb); +mutex_lock (&sbi->s_lock); sb_count =fs32_to_cpu (sbi, *sbi->s_free_blocks);if (0 )
@@ -211,7 +211,7 @@ unsigned long sysv_count_free_blocks(strif (count != sb_count) goto Ecount; done: -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return count; Einval:
fs/sysv/ialloc.c +7 -7
@@ -118,7 +118,7 @@ void sysv_free_inode(struct inode * inod "%s\n", inode->i_sb->s_id);return ; } -lock_super (sb); +mutex_lock (&sbi->s_lock); count =fs16_to_cpu (sbi, *sbi->s_sb_fic_count);if (count < sbi->s_fic_size) { *sv_sb_fic_inode (sb,count++) =cpu_to_fs16 (sbi, ino);
@@ -128,7 +128,7 @@ void sysv_free_inode(struct inode * inoddirty_sb (sb);memset (raw_inode,0 ,sizeof (struct sysv_inode ));mark_buffer_dirty (bh); -unlock_super (sb); +mutex_unlock (&sbi->s_lock);brelse (bh); }
@@ -147,13 +147,13 @@ struct inode * sysv_new_inode(const struif (!inode)return ERR_PTR (-ENOMEM ); -lock_super (sb); +mutex_lock (&sbi->s_lock); count =fs16_to_cpu (sbi, *sbi->s_sb_fic_count);if (count ==0 || (*sv_sb_fic_inode (sb,count-1 ) ==0 )) { count =refill_free_cache (sb);if (count ==0 ) {iput (inode); -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return ERR_PTR (-ENOSPC ); } }
@@ -174,7 +174,7 @@ struct inode * sysv_new_inode(const strusysv_write_inode (inode, &wbc);/* ensure inode not allocated again */ mark_inode_dirty (inode);/* cleared by sysv_write_inode() */ /* That's it. */ -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return inode; }
@@ -185,7 +185,7 @@ unsigned long sysv_count_free_inodes(strstruct sysv_inode * raw_inode;int ino, count, sb_count; -lock_super (sb); +mutex_lock (&sbi->s_lock); sb_count =fs16_to_cpu (sbi, *sbi->s_sb_total_free_inodes);
@@ -213,7 +213,7 @@ unsigned long sysv_count_free_inodes(strif (count != sb_count) goto Einval; out: -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return count; Einval:
fs/sysv/inode.c +2 -2
@@ -36,7 +36,7 @@ static int sysv_sync_fs(struct super_blostruct sysv_sb_info *sbi =SYSV_SB (sb);unsigned long time =get_seconds (), old_time; -lock_super (sb); +mutex_lock (&sbi->s_lock);/* * If we are going to write out the super block,
@@ -51,7 +51,7 @@ static int sysv_sync_fs(struct super_blomark_buffer_dirty (sbi->s_bh2); } -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return 0 ; }
fs/sysv/super.c +1 -0
@@ -368,6 +368,7 @@ static int sysv_fill_super(struct super_ sbi->s_sb = sb; sbi->s_block_base =0 ; +mutex_init (&sbi->s_lock); sb->s_fs_info = sbi;sb_set_blocksize (sb,BLOCK_SIZE );
fs/sysv/sysv.h +1 -0
@@ -58,6 +58,7 @@ struct sysv_sb_info {u32 s_nzones;/* same as s_sbd->s_fsize */ u16 s_namelen;/* max length of dir entry */ int s_forced_ro; +struct mutex s_lock; };/*