diff options
author | Boaz Harrosh <bharrosh@panasas.com> | 2009-08-19 10:56:46 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-09-24 07:47:38 -0400 |
commit | 1ba50bbe93ebb98e83b174a85eff76af430c4e5b (patch) | |
tree | 4c7b7db057fa5ca60a4e1adcb5dfb63cbf5a5702 /fs | |
parent | 88a0a53d702b1fa39ed9e631939d2dbd92dfe486 (diff) |
exofs: remove BKL from super operations
the two places inside exofs that where taking the BKL were:
exofs_put_super() - .put_super
and
exofs_sync_fs() - which is .sync_fs and is also called from
.write_super.
Now exofs_sync_fs() is protected from itself by also taking
the sb_lock.
exofs_put_super() directly calls exofs_sync_fs() so there is no
danger between these two either.
In anyway there is absolutely nothing dangerous been done
inside exofs_sync_fs().
Unless there is some subtle race with the actual lifetime of
the super_block in regard to .put_super and some other parts
of the VFS. Which is highly unlikely.
Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/exofs/super.c | 6 |
1 files changed, 0 insertions, 6 deletions
diff --git a/fs/exofs/super.c b/fs/exofs/super.c index 5ab10c3bbebe..9f500dec3b59 100644 --- a/fs/exofs/super.c +++ b/fs/exofs/super.c | |||
@@ -214,7 +214,6 @@ int exofs_sync_fs(struct super_block *sb, int wait) | |||
214 | } | 214 | } |
215 | 215 | ||
216 | lock_super(sb); | 216 | lock_super(sb); |
217 | lock_kernel(); | ||
218 | sbi = sb->s_fs_info; | 217 | sbi = sb->s_fs_info; |
219 | fscb->s_nextid = cpu_to_le64(sbi->s_nextid); | 218 | fscb->s_nextid = cpu_to_le64(sbi->s_nextid); |
220 | fscb->s_numfiles = cpu_to_le32(sbi->s_numfiles); | 219 | fscb->s_numfiles = cpu_to_le32(sbi->s_numfiles); |
@@ -245,7 +244,6 @@ int exofs_sync_fs(struct super_block *sb, int wait) | |||
245 | out: | 244 | out: |
246 | if (or) | 245 | if (or) |
247 | osd_end_request(or); | 246 | osd_end_request(or); |
248 | unlock_kernel(); | ||
249 | unlock_super(sb); | 247 | unlock_super(sb); |
250 | kfree(fscb); | 248 | kfree(fscb); |
251 | return ret; | 249 | return ret; |
@@ -268,8 +266,6 @@ static void exofs_put_super(struct super_block *sb) | |||
268 | int num_pend; | 266 | int num_pend; |
269 | struct exofs_sb_info *sbi = sb->s_fs_info; | 267 | struct exofs_sb_info *sbi = sb->s_fs_info; |
270 | 268 | ||
271 | lock_kernel(); | ||
272 | |||
273 | if (sb->s_dirt) | 269 | if (sb->s_dirt) |
274 | exofs_write_super(sb); | 270 | exofs_write_super(sb); |
275 | 271 | ||
@@ -286,8 +282,6 @@ static void exofs_put_super(struct super_block *sb) | |||
286 | osduld_put_device(sbi->s_dev); | 282 | osduld_put_device(sbi->s_dev); |
287 | kfree(sb->s_fs_info); | 283 | kfree(sb->s_fs_info); |
288 | sb->s_fs_info = NULL; | 284 | sb->s_fs_info = NULL; |
289 | |||
290 | unlock_kernel(); | ||
291 | } | 285 | } |
292 | 286 | ||
293 | /* | 287 | /* |