diff options
-rw-r--r-- | block/cfq-iosched.c | 28 | ||||
-rw-r--r-- | fs/reiserfs/journal.c | 13 | ||||
-rw-r--r-- | fs/super.c | 4 | ||||
-rw-r--r-- | include/linux/fs.h | 4 | ||||
-rw-r--r-- | include/linux/init_task.h | 1 | ||||
-rw-r--r-- | include/linux/sched.h | 1 | ||||
-rw-r--r-- | kernel/exit.c | 1 | ||||
-rw-r--r-- | kernel/fork.c | 1 |
8 files changed, 1 insertions, 52 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 762bd509b71b..d8b108737b72 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -134,7 +134,7 @@ struct cfq_queue { | |||
134 | 134 | ||
135 | /* io prio of this group */ | 135 | /* io prio of this group */ |
136 | unsigned short ioprio, org_ioprio; | 136 | unsigned short ioprio, org_ioprio; |
137 | unsigned short ioprio_class, org_ioprio_class; | 137 | unsigned short ioprio_class; |
138 | 138 | ||
139 | pid_t pid; | 139 | pid_t pid; |
140 | 140 | ||
@@ -2869,7 +2869,6 @@ static void cfq_init_prio_data(struct cfq_queue *cfqq, struct io_context *ioc) | |||
2869 | * elevate the priority of this queue | 2869 | * elevate the priority of this queue |
2870 | */ | 2870 | */ |
2871 | cfqq->org_ioprio = cfqq->ioprio; | 2871 | cfqq->org_ioprio = cfqq->ioprio; |
2872 | cfqq->org_ioprio_class = cfqq->ioprio_class; | ||
2873 | cfq_clear_cfqq_prio_changed(cfqq); | 2872 | cfq_clear_cfqq_prio_changed(cfqq); |
2874 | } | 2873 | } |
2875 | 2874 | ||
@@ -3593,30 +3592,6 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq) | |||
3593 | cfq_schedule_dispatch(cfqd); | 3592 | cfq_schedule_dispatch(cfqd); |
3594 | } | 3593 | } |
3595 | 3594 | ||
3596 | /* | ||
3597 | * we temporarily boost lower priority queues if they are holding fs exclusive | ||
3598 | * resources. they are boosted to normal prio (CLASS_BE/4) | ||
3599 | */ | ||
3600 | static void cfq_prio_boost(struct cfq_queue *cfqq) | ||
3601 | { | ||
3602 | if (has_fs_excl()) { | ||
3603 | /* | ||
3604 | * boost idle prio on transactions that would lock out other | ||
3605 | * users of the filesystem | ||
3606 | */ | ||
3607 | if (cfq_class_idle(cfqq)) | ||
3608 | cfqq->ioprio_class = IOPRIO_CLASS_BE; | ||
3609 | if (cfqq->ioprio > IOPRIO_NORM) | ||
3610 | cfqq->ioprio = IOPRIO_NORM; | ||
3611 | } else { | ||
3612 | /* | ||
3613 | * unboost the queue (if needed) | ||
3614 | */ | ||
3615 | cfqq->ioprio_class = cfqq->org_ioprio_class; | ||
3616 | cfqq->ioprio = cfqq->org_ioprio; | ||
3617 | } | ||
3618 | } | ||
3619 | |||
3620 | static inline int __cfq_may_queue(struct cfq_queue *cfqq) | 3595 | static inline int __cfq_may_queue(struct cfq_queue *cfqq) |
3621 | { | 3596 | { |
3622 | if (cfq_cfqq_wait_request(cfqq) && !cfq_cfqq_must_alloc_slice(cfqq)) { | 3597 | if (cfq_cfqq_wait_request(cfqq) && !cfq_cfqq_must_alloc_slice(cfqq)) { |
@@ -3647,7 +3622,6 @@ static int cfq_may_queue(struct request_queue *q, int rw) | |||
3647 | cfqq = cic_to_cfqq(cic, rw_is_sync(rw)); | 3622 | cfqq = cic_to_cfqq(cic, rw_is_sync(rw)); |
3648 | if (cfqq) { | 3623 | if (cfqq) { |
3649 | cfq_init_prio_data(cfqq, cic->ioc); | 3624 | cfq_init_prio_data(cfqq, cic->ioc); |
3650 | cfq_prio_boost(cfqq); | ||
3651 | 3625 | ||
3652 | return __cfq_may_queue(cfqq); | 3626 | return __cfq_may_queue(cfqq); |
3653 | } | 3627 | } |
diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c index c5e82ece7c6c..a159ba5a35e7 100644 --- a/fs/reiserfs/journal.c +++ b/fs/reiserfs/journal.c | |||
@@ -678,23 +678,19 @@ struct buffer_chunk { | |||
678 | static void write_chunk(struct buffer_chunk *chunk) | 678 | static void write_chunk(struct buffer_chunk *chunk) |
679 | { | 679 | { |
680 | int i; | 680 | int i; |
681 | get_fs_excl(); | ||
682 | for (i = 0; i < chunk->nr; i++) { | 681 | for (i = 0; i < chunk->nr; i++) { |
683 | submit_logged_buffer(chunk->bh[i]); | 682 | submit_logged_buffer(chunk->bh[i]); |
684 | } | 683 | } |
685 | chunk->nr = 0; | 684 | chunk->nr = 0; |
686 | put_fs_excl(); | ||
687 | } | 685 | } |
688 | 686 | ||
689 | static void write_ordered_chunk(struct buffer_chunk *chunk) | 687 | static void write_ordered_chunk(struct buffer_chunk *chunk) |
690 | { | 688 | { |
691 | int i; | 689 | int i; |
692 | get_fs_excl(); | ||
693 | for (i = 0; i < chunk->nr; i++) { | 690 | for (i = 0; i < chunk->nr; i++) { |
694 | submit_ordered_buffer(chunk->bh[i]); | 691 | submit_ordered_buffer(chunk->bh[i]); |
695 | } | 692 | } |
696 | chunk->nr = 0; | 693 | chunk->nr = 0; |
697 | put_fs_excl(); | ||
698 | } | 694 | } |
699 | 695 | ||
700 | static int add_to_chunk(struct buffer_chunk *chunk, struct buffer_head *bh, | 696 | static int add_to_chunk(struct buffer_chunk *chunk, struct buffer_head *bh, |
@@ -986,8 +982,6 @@ static int flush_commit_list(struct super_block *s, | |||
986 | return 0; | 982 | return 0; |
987 | } | 983 | } |
988 | 984 | ||
989 | get_fs_excl(); | ||
990 | |||
991 | /* before we can put our commit blocks on disk, we have to make sure everyone older than | 985 | /* before we can put our commit blocks on disk, we have to make sure everyone older than |
992 | ** us is on disk too | 986 | ** us is on disk too |
993 | */ | 987 | */ |
@@ -1145,7 +1139,6 @@ static int flush_commit_list(struct super_block *s, | |||
1145 | if (retval) | 1139 | if (retval) |
1146 | reiserfs_abort(s, retval, "Journal write error in %s", | 1140 | reiserfs_abort(s, retval, "Journal write error in %s", |
1147 | __func__); | 1141 | __func__); |
1148 | put_fs_excl(); | ||
1149 | return retval; | 1142 | return retval; |
1150 | } | 1143 | } |
1151 | 1144 | ||
@@ -1374,8 +1367,6 @@ static int flush_journal_list(struct super_block *s, | |||
1374 | return 0; | 1367 | return 0; |
1375 | } | 1368 | } |
1376 | 1369 | ||
1377 | get_fs_excl(); | ||
1378 | |||
1379 | /* if all the work is already done, get out of here */ | 1370 | /* if all the work is already done, get out of here */ |
1380 | if (atomic_read(&(jl->j_nonzerolen)) <= 0 && | 1371 | if (atomic_read(&(jl->j_nonzerolen)) <= 0 && |
1381 | atomic_read(&(jl->j_commit_left)) <= 0) { | 1372 | atomic_read(&(jl->j_commit_left)) <= 0) { |
@@ -1597,7 +1588,6 @@ static int flush_journal_list(struct super_block *s, | |||
1597 | put_journal_list(s, jl); | 1588 | put_journal_list(s, jl); |
1598 | if (flushall) | 1589 | if (flushall) |
1599 | mutex_unlock(&journal->j_flush_mutex); | 1590 | mutex_unlock(&journal->j_flush_mutex); |
1600 | put_fs_excl(); | ||
1601 | return err; | 1591 | return err; |
1602 | } | 1592 | } |
1603 | 1593 | ||
@@ -3108,7 +3098,6 @@ static int do_journal_begin_r(struct reiserfs_transaction_handle *th, | |||
3108 | th->t_trans_id = journal->j_trans_id; | 3098 | th->t_trans_id = journal->j_trans_id; |
3109 | unlock_journal(sb); | 3099 | unlock_journal(sb); |
3110 | INIT_LIST_HEAD(&th->t_list); | 3100 | INIT_LIST_HEAD(&th->t_list); |
3111 | get_fs_excl(); | ||
3112 | return 0; | 3101 | return 0; |
3113 | 3102 | ||
3114 | out_fail: | 3103 | out_fail: |
@@ -3964,7 +3953,6 @@ static int do_journal_end(struct reiserfs_transaction_handle *th, | |||
3964 | flush = flags & FLUSH_ALL; | 3953 | flush = flags & FLUSH_ALL; |
3965 | wait_on_commit = flags & WAIT; | 3954 | wait_on_commit = flags & WAIT; |
3966 | 3955 | ||
3967 | put_fs_excl(); | ||
3968 | current->journal_info = th->t_handle_save; | 3956 | current->journal_info = th->t_handle_save; |
3969 | reiserfs_check_lock_depth(sb, "journal end"); | 3957 | reiserfs_check_lock_depth(sb, "journal end"); |
3970 | if (journal->j_len == 0) { | 3958 | if (journal->j_len == 0) { |
@@ -4316,4 +4304,3 @@ void reiserfs_abort_journal(struct super_block *sb, int errno) | |||
4316 | dump_stack(); | 4304 | dump_stack(); |
4317 | #endif | 4305 | #endif |
4318 | } | 4306 | } |
4319 | |||
diff --git a/fs/super.c b/fs/super.c index ab3d672db0de..cf12ba50973b 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -245,13 +245,11 @@ static int grab_super(struct super_block *s) __releases(sb_lock) | |||
245 | */ | 245 | */ |
246 | void lock_super(struct super_block * sb) | 246 | void lock_super(struct super_block * sb) |
247 | { | 247 | { |
248 | get_fs_excl(); | ||
249 | mutex_lock(&sb->s_lock); | 248 | mutex_lock(&sb->s_lock); |
250 | } | 249 | } |
251 | 250 | ||
252 | void unlock_super(struct super_block * sb) | 251 | void unlock_super(struct super_block * sb) |
253 | { | 252 | { |
254 | put_fs_excl(); | ||
255 | mutex_unlock(&sb->s_lock); | 253 | mutex_unlock(&sb->s_lock); |
256 | } | 254 | } |
257 | 255 | ||
@@ -280,7 +278,6 @@ void generic_shutdown_super(struct super_block *sb) | |||
280 | if (sb->s_root) { | 278 | if (sb->s_root) { |
281 | shrink_dcache_for_umount(sb); | 279 | shrink_dcache_for_umount(sb); |
282 | sync_filesystem(sb); | 280 | sync_filesystem(sb); |
283 | get_fs_excl(); | ||
284 | sb->s_flags &= ~MS_ACTIVE; | 281 | sb->s_flags &= ~MS_ACTIVE; |
285 | 282 | ||
286 | fsnotify_unmount_inodes(&sb->s_inodes); | 283 | fsnotify_unmount_inodes(&sb->s_inodes); |
@@ -295,7 +292,6 @@ void generic_shutdown_super(struct super_block *sb) | |||
295 | "Self-destruct in 5 seconds. Have a nice day...\n", | 292 | "Self-destruct in 5 seconds. Have a nice day...\n", |
296 | sb->s_id); | 293 | sb->s_id); |
297 | } | 294 | } |
298 | put_fs_excl(); | ||
299 | } | 295 | } |
300 | spin_lock(&sb_lock); | 296 | spin_lock(&sb_lock); |
301 | /* should be initialized for __put_super_and_need_restart() */ | 297 | /* should be initialized for __put_super_and_need_restart() */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 6e73e2e9ae33..f6c866c287b5 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1453,10 +1453,6 @@ enum { | |||
1453 | #define vfs_check_frozen(sb, level) \ | 1453 | #define vfs_check_frozen(sb, level) \ |
1454 | wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level))) | 1454 | wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level))) |
1455 | 1455 | ||
1456 | #define get_fs_excl() atomic_inc(¤t->fs_excl) | ||
1457 | #define put_fs_excl() atomic_dec(¤t->fs_excl) | ||
1458 | #define has_fs_excl() atomic_read(¤t->fs_excl) | ||
1459 | |||
1460 | /* | 1456 | /* |
1461 | * until VFS tracks user namespaces for inodes, just make all files | 1457 | * until VFS tracks user namespaces for inodes, just make all files |
1462 | * belong to init_user_ns | 1458 | * belong to init_user_ns |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 580f70c02391..d14e058aaeed 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -176,7 +176,6 @@ extern struct cred init_cred; | |||
176 | .alloc_lock = __SPIN_LOCK_UNLOCKED(tsk.alloc_lock), \ | 176 | .alloc_lock = __SPIN_LOCK_UNLOCKED(tsk.alloc_lock), \ |
177 | .journal_info = NULL, \ | 177 | .journal_info = NULL, \ |
178 | .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ | 178 | .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ |
179 | .fs_excl = ATOMIC_INIT(0), \ | ||
180 | .pi_lock = __RAW_SPIN_LOCK_UNLOCKED(tsk.pi_lock), \ | 179 | .pi_lock = __RAW_SPIN_LOCK_UNLOCKED(tsk.pi_lock), \ |
181 | .timer_slack_ns = 50000, /* 50 usec default slack */ \ | 180 | .timer_slack_ns = 50000, /* 50 usec default slack */ \ |
182 | .pids = { \ | 181 | .pids = { \ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index a837b20ba190..22f54249cde1 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1503,7 +1503,6 @@ struct task_struct { | |||
1503 | short il_next; | 1503 | short il_next; |
1504 | short pref_node_fork; | 1504 | short pref_node_fork; |
1505 | #endif | 1505 | #endif |
1506 | atomic_t fs_excl; /* holding fs exclusive resources */ | ||
1507 | struct rcu_head rcu; | 1506 | struct rcu_head rcu; |
1508 | 1507 | ||
1509 | /* | 1508 | /* |
diff --git a/kernel/exit.c b/kernel/exit.c index f2b321bae440..b412df45ea6c 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -906,7 +906,6 @@ NORET_TYPE void do_exit(long code) | |||
906 | 906 | ||
907 | profile_task_exit(tsk); | 907 | profile_task_exit(tsk); |
908 | 908 | ||
909 | WARN_ON(atomic_read(&tsk->fs_excl)); | ||
910 | WARN_ON(blk_needs_flush_plug(tsk)); | 909 | WARN_ON(blk_needs_flush_plug(tsk)); |
911 | 910 | ||
912 | if (unlikely(in_interrupt())) | 911 | if (unlikely(in_interrupt())) |
diff --git a/kernel/fork.c b/kernel/fork.c index 0276c30401a0..30a0e8607223 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -291,7 +291,6 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) | |||
291 | 291 | ||
292 | /* One for us, one for whoever does the "release_task()" (usually parent) */ | 292 | /* One for us, one for whoever does the "release_task()" (usually parent) */ |
293 | atomic_set(&tsk->usage,2); | 293 | atomic_set(&tsk->usage,2); |
294 | atomic_set(&tsk->fs_excl, 0); | ||
295 | #ifdef CONFIG_BLK_DEV_IO_TRACE | 294 | #ifdef CONFIG_BLK_DEV_IO_TRACE |
296 | tsk->btrace_seq = 0; | 295 | tsk->btrace_seq = 0; |
297 | #endif | 296 | #endif |