diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-08-21 13:24:02 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-08-21 13:24:02 -0400 |
commit | ae298c98e5ab5bab3b39ffe0c2aebfeb4b1e68a2 (patch) | |
tree | c7d5775c294b98301fdc726395dfb37d9878461d | |
parent | da547d775fa9ba8d9dcaee7bc4e960540e2be576 (diff) | |
parent | be33c3a67bb717508ab1eab0f2fa570fabcbc4d2 (diff) |
Merge branch 'for-linus' of git://brick.kernel.dk/data/git/linux-2.6-block
-rw-r--r-- | block/cfq-iosched.c | 2 | ||||
-rw-r--r-- | block/ll_rw_blk.c | 2 | ||||
-rw-r--r-- | fs/ioprio.c | 30 | ||||
-rw-r--r-- | include/linux/ioprio.h | 23 |
4 files changed, 32 insertions, 25 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index aae3123bf3ee..3a3aee08ec5f 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -1561,7 +1561,7 @@ restart: | |||
1561 | /* ->key must be copied to avoid race with cfq_exit_queue() */ | 1561 | /* ->key must be copied to avoid race with cfq_exit_queue() */ |
1562 | k = __cic->key; | 1562 | k = __cic->key; |
1563 | if (unlikely(!k)) { | 1563 | if (unlikely(!k)) { |
1564 | cfq_drop_dead_cic(ioc, cic); | 1564 | cfq_drop_dead_cic(ioc, __cic); |
1565 | goto restart; | 1565 | goto restart; |
1566 | } | 1566 | } |
1567 | 1567 | ||
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c index 61d6b3c65b66..ddd9253f9d55 100644 --- a/block/ll_rw_blk.c +++ b/block/ll_rw_blk.c | |||
@@ -3628,6 +3628,8 @@ struct io_context *current_io_context(gfp_t gfp_flags) | |||
3628 | ret->nr_batch_requests = 0; /* because this is 0 */ | 3628 | ret->nr_batch_requests = 0; /* because this is 0 */ |
3629 | ret->aic = NULL; | 3629 | ret->aic = NULL; |
3630 | ret->cic_root.rb_node = NULL; | 3630 | ret->cic_root.rb_node = NULL; |
3631 | /* make sure set_task_ioprio() sees the settings above */ | ||
3632 | smp_wmb(); | ||
3631 | tsk->io_context = ret; | 3633 | tsk->io_context = ret; |
3632 | } | 3634 | } |
3633 | 3635 | ||
diff --git a/fs/ioprio.c b/fs/ioprio.c index 93aa5715f224..78b1deae3fa2 100644 --- a/fs/ioprio.c +++ b/fs/ioprio.c | |||
@@ -44,6 +44,9 @@ static int set_task_ioprio(struct task_struct *task, int ioprio) | |||
44 | task->ioprio = ioprio; | 44 | task->ioprio = ioprio; |
45 | 45 | ||
46 | ioc = task->io_context; | 46 | ioc = task->io_context; |
47 | /* see wmb() in current_io_context() */ | ||
48 | smp_read_barrier_depends(); | ||
49 | |||
47 | if (ioc && ioc->set_ioprio) | 50 | if (ioc && ioc->set_ioprio) |
48 | ioc->set_ioprio(ioc, ioprio); | 51 | ioc->set_ioprio(ioc, ioprio); |
49 | 52 | ||
@@ -111,9 +114,9 @@ asmlinkage long sys_ioprio_set(int which, int who, int ioprio) | |||
111 | continue; | 114 | continue; |
112 | ret = set_task_ioprio(p, ioprio); | 115 | ret = set_task_ioprio(p, ioprio); |
113 | if (ret) | 116 | if (ret) |
114 | break; | 117 | goto free_uid; |
115 | } while_each_thread(g, p); | 118 | } while_each_thread(g, p); |
116 | 119 | free_uid: | |
117 | if (who) | 120 | if (who) |
118 | free_uid(user); | 121 | free_uid(user); |
119 | break; | 122 | break; |
@@ -137,6 +140,29 @@ out: | |||
137 | return ret; | 140 | return ret; |
138 | } | 141 | } |
139 | 142 | ||
143 | int ioprio_best(unsigned short aprio, unsigned short bprio) | ||
144 | { | ||
145 | unsigned short aclass = IOPRIO_PRIO_CLASS(aprio); | ||
146 | unsigned short bclass = IOPRIO_PRIO_CLASS(bprio); | ||
147 | |||
148 | if (!ioprio_valid(aprio)) | ||
149 | return bprio; | ||
150 | if (!ioprio_valid(bprio)) | ||
151 | return aprio; | ||
152 | |||
153 | if (aclass == IOPRIO_CLASS_NONE) | ||
154 | aclass = IOPRIO_CLASS_BE; | ||
155 | if (bclass == IOPRIO_CLASS_NONE) | ||
156 | bclass = IOPRIO_CLASS_BE; | ||
157 | |||
158 | if (aclass == bclass) | ||
159 | return min(aprio, bprio); | ||
160 | if (aclass > bclass) | ||
161 | return bprio; | ||
162 | else | ||
163 | return aprio; | ||
164 | } | ||
165 | |||
140 | asmlinkage long sys_ioprio_get(int which, int who) | 166 | asmlinkage long sys_ioprio_get(int which, int who) |
141 | { | 167 | { |
142 | struct task_struct *g, *p; | 168 | struct task_struct *g, *p; |
diff --git a/include/linux/ioprio.h b/include/linux/ioprio.h index 88d5961f7a3f..8e2042b9d471 100644 --- a/include/linux/ioprio.h +++ b/include/linux/ioprio.h | |||
@@ -59,27 +59,6 @@ static inline int task_nice_ioprio(struct task_struct *task) | |||
59 | /* | 59 | /* |
60 | * For inheritance, return the highest of the two given priorities | 60 | * For inheritance, return the highest of the two given priorities |
61 | */ | 61 | */ |
62 | static inline int ioprio_best(unsigned short aprio, unsigned short bprio) | 62 | extern int ioprio_best(unsigned short aprio, unsigned short bprio); |
63 | { | ||
64 | unsigned short aclass = IOPRIO_PRIO_CLASS(aprio); | ||
65 | unsigned short bclass = IOPRIO_PRIO_CLASS(bprio); | ||
66 | |||
67 | if (!ioprio_valid(aprio)) | ||
68 | return bprio; | ||
69 | if (!ioprio_valid(bprio)) | ||
70 | return aprio; | ||
71 | |||
72 | if (aclass == IOPRIO_CLASS_NONE) | ||
73 | aclass = IOPRIO_CLASS_BE; | ||
74 | if (bclass == IOPRIO_CLASS_NONE) | ||
75 | bclass = IOPRIO_CLASS_BE; | ||
76 | |||
77 | if (aclass == bclass) | ||
78 | return min(aprio, bprio); | ||
79 | if (aclass > bclass) | ||
80 | return bprio; | ||
81 | else | ||
82 | return aprio; | ||
83 | } | ||
84 | 63 | ||
85 | #endif | 64 | #endif |