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 | |
| 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>
| -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 | /* |
