提交 c07cb01c 编写于 作者: M Marco Stornelli 提交者: Al Viro

sysv: drop lock/unlock super

Removed lock/unlock super. Added a new private s_lock mutex.
Signed-off-by: NMarco Stornelli <marco.stornelli@gmail.com>
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 f6e12dc4
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
...@@ -60,12 +60,12 @@ void sysv_free_block(struct super_block * sb, sysv_zone_t nr) ...@@ -60,12 +60,12 @@ void sysv_free_block(struct super_block * sb, sysv_zone_t nr)
return; return;
} }
lock_super(sb); mutex_lock(&sbi->s_lock);
count = fs16_to_cpu(sbi, *sbi->s_bcache_count); count = fs16_to_cpu(sbi, *sbi->s_bcache_count);
if (count > sbi->s_flc_size) { if (count > sbi->s_flc_size) {
printk("sysv_free_block: flc_count > flc_size\n"); printk("sysv_free_block: flc_count > flc_size\n");
unlock_super(sb); mutex_unlock(&sbi->s_lock);
return; return;
} }
/* If the free list head in super-block is full, it is copied /* If the free list head in super-block is full, it is copied
...@@ -77,7 +77,7 @@ void sysv_free_block(struct super_block * sb, sysv_zone_t nr) ...@@ -77,7 +77,7 @@ void sysv_free_block(struct super_block * sb, sysv_zone_t nr)
bh = sb_getblk(sb, block); bh = sb_getblk(sb, block);
if (!bh) { if (!bh) {
printk("sysv_free_block: getblk() failed\n"); printk("sysv_free_block: getblk() failed\n");
unlock_super(sb); mutex_unlock(&sbi->s_lock);
return; return;
} }
memset(bh->b_data, 0, sb->s_blocksize); memset(bh->b_data, 0, sb->s_blocksize);
...@@ -93,7 +93,7 @@ void sysv_free_block(struct super_block * sb, sysv_zone_t nr) ...@@ -93,7 +93,7 @@ void sysv_free_block(struct super_block * sb, sysv_zone_t nr)
*sbi->s_bcache_count = cpu_to_fs16(sbi, count); *sbi->s_bcache_count = cpu_to_fs16(sbi, count);
fs32_add(sbi, sbi->s_free_blocks, 1); fs32_add(sbi, sbi->s_free_blocks, 1);
dirty_sb(sb); dirty_sb(sb);
unlock_super(sb); mutex_unlock(&sbi->s_lock);
} }
sysv_zone_t sysv_new_block(struct super_block * sb) sysv_zone_t sysv_new_block(struct super_block * sb)
...@@ -104,7 +104,7 @@ sysv_zone_t sysv_new_block(struct super_block * sb) ...@@ -104,7 +104,7 @@ sysv_zone_t sysv_new_block(struct super_block * sb)
struct buffer_head * bh; struct buffer_head * bh;
unsigned count; unsigned count;
lock_super(sb); mutex_lock(&sbi->s_lock);
count = fs16_to_cpu(sbi, *sbi->s_bcache_count); count = fs16_to_cpu(sbi, *sbi->s_bcache_count);
if (count == 0) /* Applies only to Coherent FS */ if (count == 0) /* Applies only to Coherent FS */
...@@ -147,11 +147,11 @@ sysv_zone_t sysv_new_block(struct super_block * sb) ...@@ -147,11 +147,11 @@ sysv_zone_t sysv_new_block(struct super_block * sb)
/* Now the free list head in the superblock is valid again. */ /* Now the free list head in the superblock is valid again. */
fs32_add(sbi, sbi->s_free_blocks, -1); fs32_add(sbi, sbi->s_free_blocks, -1);
dirty_sb(sb); dirty_sb(sb);
unlock_super(sb); mutex_unlock(&sbi->s_lock);
return nr; return nr;
Enospc: Enospc:
unlock_super(sb); mutex_unlock(&sbi->s_lock);
return 0; return 0;
} }
...@@ -173,7 +173,7 @@ unsigned long sysv_count_free_blocks(struct super_block * sb) ...@@ -173,7 +173,7 @@ unsigned long sysv_count_free_blocks(struct super_block * sb)
if (sbi->s_type == FSTYPE_AFS) if (sbi->s_type == FSTYPE_AFS)
return 0; return 0;
lock_super(sb); mutex_lock(&sbi->s_lock);
sb_count = fs32_to_cpu(sbi, *sbi->s_free_blocks); sb_count = fs32_to_cpu(sbi, *sbi->s_free_blocks);
if (0) if (0)
...@@ -211,7 +211,7 @@ unsigned long sysv_count_free_blocks(struct super_block * sb) ...@@ -211,7 +211,7 @@ unsigned long sysv_count_free_blocks(struct super_block * sb)
if (count != sb_count) if (count != sb_count)
goto Ecount; goto Ecount;
done: done:
unlock_super(sb); mutex_unlock(&sbi->s_lock);
return count; return count;
Einval: Einval:
......
...@@ -118,7 +118,7 @@ void sysv_free_inode(struct inode * inode) ...@@ -118,7 +118,7 @@ void sysv_free_inode(struct inode * inode)
"%s\n", inode->i_sb->s_id); "%s\n", inode->i_sb->s_id);
return; return;
} }
lock_super(sb); mutex_lock(&sbi->s_lock);
count = fs16_to_cpu(sbi, *sbi->s_sb_fic_count); count = fs16_to_cpu(sbi, *sbi->s_sb_fic_count);
if (count < sbi->s_fic_size) { if (count < sbi->s_fic_size) {
*sv_sb_fic_inode(sb,count++) = cpu_to_fs16(sbi, ino); *sv_sb_fic_inode(sb,count++) = cpu_to_fs16(sbi, ino);
...@@ -128,7 +128,7 @@ void sysv_free_inode(struct inode * inode) ...@@ -128,7 +128,7 @@ void sysv_free_inode(struct inode * inode)
dirty_sb(sb); dirty_sb(sb);
memset(raw_inode, 0, sizeof(struct sysv_inode)); memset(raw_inode, 0, sizeof(struct sysv_inode));
mark_buffer_dirty(bh); mark_buffer_dirty(bh);
unlock_super(sb); mutex_unlock(&sbi->s_lock);
brelse(bh); brelse(bh);
} }
...@@ -147,13 +147,13 @@ struct inode * sysv_new_inode(const struct inode * dir, umode_t mode) ...@@ -147,13 +147,13 @@ struct inode * sysv_new_inode(const struct inode * dir, umode_t mode)
if (!inode) if (!inode)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
lock_super(sb); mutex_lock(&sbi->s_lock);
count = fs16_to_cpu(sbi, *sbi->s_sb_fic_count); count = fs16_to_cpu(sbi, *sbi->s_sb_fic_count);
if (count == 0 || (*sv_sb_fic_inode(sb,count-1) == 0)) { if (count == 0 || (*sv_sb_fic_inode(sb,count-1) == 0)) {
count = refill_free_cache(sb); count = refill_free_cache(sb);
if (count == 0) { if (count == 0) {
iput(inode); iput(inode);
unlock_super(sb); mutex_unlock(&sbi->s_lock);
return ERR_PTR(-ENOSPC); return ERR_PTR(-ENOSPC);
} }
} }
...@@ -174,7 +174,7 @@ struct inode * sysv_new_inode(const struct inode * dir, umode_t mode) ...@@ -174,7 +174,7 @@ struct inode * sysv_new_inode(const struct inode * dir, umode_t mode)
sysv_write_inode(inode, &wbc); /* ensure inode not allocated again */ sysv_write_inode(inode, &wbc); /* ensure inode not allocated again */
mark_inode_dirty(inode); /* cleared by sysv_write_inode() */ mark_inode_dirty(inode); /* cleared by sysv_write_inode() */
/* That's it. */ /* That's it. */
unlock_super(sb); mutex_unlock(&sbi->s_lock);
return inode; return inode;
} }
...@@ -185,7 +185,7 @@ unsigned long sysv_count_free_inodes(struct super_block * sb) ...@@ -185,7 +185,7 @@ unsigned long sysv_count_free_inodes(struct super_block * sb)
struct sysv_inode * raw_inode; struct sysv_inode * raw_inode;
int ino, count, sb_count; 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); sb_count = fs16_to_cpu(sbi, *sbi->s_sb_total_free_inodes);
...@@ -213,7 +213,7 @@ unsigned long sysv_count_free_inodes(struct super_block * sb) ...@@ -213,7 +213,7 @@ unsigned long sysv_count_free_inodes(struct super_block * sb)
if (count != sb_count) if (count != sb_count)
goto Einval; goto Einval;
out: out:
unlock_super(sb); mutex_unlock(&sbi->s_lock);
return count; return count;
Einval: Einval:
......
...@@ -36,7 +36,7 @@ static int sysv_sync_fs(struct super_block *sb, int wait) ...@@ -36,7 +36,7 @@ static int sysv_sync_fs(struct super_block *sb, int wait)
struct sysv_sb_info *sbi = SYSV_SB(sb); struct sysv_sb_info *sbi = SYSV_SB(sb);
unsigned long time = get_seconds(), old_time; 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, * If we are going to write out the super block,
...@@ -51,7 +51,7 @@ static int sysv_sync_fs(struct super_block *sb, int wait) ...@@ -51,7 +51,7 @@ static int sysv_sync_fs(struct super_block *sb, int wait)
mark_buffer_dirty(sbi->s_bh2); mark_buffer_dirty(sbi->s_bh2);
} }
unlock_super(sb); mutex_unlock(&sbi->s_lock);
return 0; return 0;
} }
......
...@@ -368,6 +368,7 @@ static int sysv_fill_super(struct super_block *sb, void *data, int silent) ...@@ -368,6 +368,7 @@ static int sysv_fill_super(struct super_block *sb, void *data, int silent)
sbi->s_sb = sb; sbi->s_sb = sb;
sbi->s_block_base = 0; sbi->s_block_base = 0;
mutex_init(&sbi->s_lock);
sb->s_fs_info = sbi; sb->s_fs_info = sbi;
sb_set_blocksize(sb, BLOCK_SIZE); sb_set_blocksize(sb, BLOCK_SIZE);
......
...@@ -58,6 +58,7 @@ struct sysv_sb_info { ...@@ -58,6 +58,7 @@ struct sysv_sb_info {
u32 s_nzones; /* same as s_sbd->s_fsize */ u32 s_nzones; /* same as s_sbd->s_fsize */
u16 s_namelen; /* max length of dir entry */ u16 s_namelen; /* max length of dir entry */
int s_forced_ro; int s_forced_ro;
struct mutex s_lock;
}; };
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部