diff options
Diffstat (limited to 'fs/fscache/operation.c')
-rw-r--r-- | fs/fscache/operation.c | 37 |
1 files changed, 14 insertions, 23 deletions
diff --git a/fs/fscache/operation.c b/fs/fscache/operation.c index 762a9ec4ffa4..318071aca217 100644 --- a/fs/fscache/operation.c +++ b/fs/fscache/operation.c | |||
@@ -35,7 +35,7 @@ void fscache_enqueue_operation(struct fscache_operation *op) | |||
35 | 35 | ||
36 | ASSERT(list_empty(&op->pend_link)); | 36 | ASSERT(list_empty(&op->pend_link)); |
37 | ASSERT(op->processor != NULL); | 37 | ASSERT(op->processor != NULL); |
38 | ASSERTCMP(op->object->state, >=, FSCACHE_OBJECT_AVAILABLE); | 38 | ASSERT(fscache_object_is_available(op->object)); |
39 | ASSERTCMP(atomic_read(&op->usage), >, 0); | 39 | ASSERTCMP(atomic_read(&op->usage), >, 0); |
40 | ASSERTCMP(op->state, ==, FSCACHE_OP_ST_IN_PROGRESS); | 40 | ASSERTCMP(op->state, ==, FSCACHE_OP_ST_IN_PROGRESS); |
41 | 41 | ||
@@ -119,7 +119,7 @@ int fscache_submit_exclusive_op(struct fscache_object *object, | |||
119 | /* need to issue a new write op after this */ | 119 | /* need to issue a new write op after this */ |
120 | clear_bit(FSCACHE_OBJECT_PENDING_WRITE, &object->flags); | 120 | clear_bit(FSCACHE_OBJECT_PENDING_WRITE, &object->flags); |
121 | ret = 0; | 121 | ret = 0; |
122 | } else if (object->state == FSCACHE_OBJECT_CREATING) { | 122 | } else if (test_bit(FSCACHE_OBJECT_IS_LOOKED_UP, &object->flags)) { |
123 | op->object = object; | 123 | op->object = object; |
124 | object->n_ops++; | 124 | object->n_ops++; |
125 | object->n_exclusive++; /* reads and writes must wait */ | 125 | object->n_exclusive++; /* reads and writes must wait */ |
@@ -144,7 +144,7 @@ int fscache_submit_exclusive_op(struct fscache_object *object, | |||
144 | */ | 144 | */ |
145 | static void fscache_report_unexpected_submission(struct fscache_object *object, | 145 | static void fscache_report_unexpected_submission(struct fscache_object *object, |
146 | struct fscache_operation *op, | 146 | struct fscache_operation *op, |
147 | unsigned long ostate) | 147 | const struct fscache_state *ostate) |
148 | { | 148 | { |
149 | static bool once_only; | 149 | static bool once_only; |
150 | struct fscache_operation *p; | 150 | struct fscache_operation *p; |
@@ -155,11 +155,8 @@ static void fscache_report_unexpected_submission(struct fscache_object *object, | |||
155 | once_only = true; | 155 | once_only = true; |
156 | 156 | ||
157 | kdebug("unexpected submission OP%x [OBJ%x %s]", | 157 | kdebug("unexpected submission OP%x [OBJ%x %s]", |
158 | op->debug_id, object->debug_id, | 158 | op->debug_id, object->debug_id, object->state->name); |
159 | fscache_object_states[object->state]); | 159 | kdebug("objstate=%s [%s]", object->state->name, ostate->name); |
160 | kdebug("objstate=%s [%s]", | ||
161 | fscache_object_states[object->state], | ||
162 | fscache_object_states[ostate]); | ||
163 | kdebug("objflags=%lx", object->flags); | 160 | kdebug("objflags=%lx", object->flags); |
164 | kdebug("objevent=%lx [%lx]", object->events, object->event_mask); | 161 | kdebug("objevent=%lx [%lx]", object->events, object->event_mask); |
165 | kdebug("ops=%u inp=%u exc=%u", | 162 | kdebug("ops=%u inp=%u exc=%u", |
@@ -190,7 +187,7 @@ static void fscache_report_unexpected_submission(struct fscache_object *object, | |||
190 | int fscache_submit_op(struct fscache_object *object, | 187 | int fscache_submit_op(struct fscache_object *object, |
191 | struct fscache_operation *op) | 188 | struct fscache_operation *op) |
192 | { | 189 | { |
193 | unsigned long ostate; | 190 | const struct fscache_state *ostate; |
194 | int ret; | 191 | int ret; |
195 | 192 | ||
196 | _enter("{OBJ%x OP%x},{%u}", | 193 | _enter("{OBJ%x OP%x},{%u}", |
@@ -226,16 +223,14 @@ int fscache_submit_op(struct fscache_object *object, | |||
226 | fscache_run_op(object, op); | 223 | fscache_run_op(object, op); |
227 | } | 224 | } |
228 | ret = 0; | 225 | ret = 0; |
229 | } else if (object->state == FSCACHE_OBJECT_CREATING) { | 226 | } else if (test_bit(FSCACHE_OBJECT_IS_LOOKED_UP, &object->flags)) { |
230 | op->object = object; | 227 | op->object = object; |
231 | object->n_ops++; | 228 | object->n_ops++; |
232 | atomic_inc(&op->usage); | 229 | atomic_inc(&op->usage); |
233 | list_add_tail(&op->pend_link, &object->pending_ops); | 230 | list_add_tail(&op->pend_link, &object->pending_ops); |
234 | fscache_stat(&fscache_n_op_pend); | 231 | fscache_stat(&fscache_n_op_pend); |
235 | ret = 0; | 232 | ret = 0; |
236 | } else if (object->state == FSCACHE_OBJECT_DYING || | 233 | } else if (fscache_object_is_dying(object)) { |
237 | object->state == FSCACHE_OBJECT_LC_DYING || | ||
238 | object->state == FSCACHE_OBJECT_WITHDRAWING) { | ||
239 | fscache_stat(&fscache_n_op_rejected); | 234 | fscache_stat(&fscache_n_op_rejected); |
240 | op->state = FSCACHE_OP_ST_CANCELLED; | 235 | op->state = FSCACHE_OP_ST_CANCELLED; |
241 | ret = -ENOBUFS; | 236 | ret = -ENOBUFS; |
@@ -265,8 +260,8 @@ void fscache_abort_object(struct fscache_object *object) | |||
265 | } | 260 | } |
266 | 261 | ||
267 | /* | 262 | /* |
268 | * jump start the operation processing on an object | 263 | * Jump start the operation processing on an object. The caller must hold |
269 | * - caller must hold object->lock | 264 | * object->lock. |
270 | */ | 265 | */ |
271 | void fscache_start_operations(struct fscache_object *object) | 266 | void fscache_start_operations(struct fscache_object *object) |
272 | { | 267 | { |
@@ -428,14 +423,10 @@ void fscache_put_operation(struct fscache_operation *op) | |||
428 | 423 | ||
429 | object = op->object; | 424 | object = op->object; |
430 | 425 | ||
431 | if (test_bit(FSCACHE_OP_DEC_READ_CNT, &op->flags)) { | 426 | if (test_bit(FSCACHE_OP_DEC_READ_CNT, &op->flags)) |
432 | if (atomic_dec_and_test(&object->n_reads)) { | 427 | atomic_dec(&object->n_reads); |
433 | clear_bit(FSCACHE_COOKIE_WAITING_ON_READS, | 428 | if (test_bit(FSCACHE_OP_UNUSE_COOKIE, &op->flags)) |
434 | &object->cookie->flags); | 429 | fscache_unuse_cookie(object); |
435 | wake_up_bit(&object->cookie->flags, | ||
436 | FSCACHE_COOKIE_WAITING_ON_READS); | ||
437 | } | ||
438 | } | ||
439 | 430 | ||
440 | /* now... we may get called with the object spinlock held, so we | 431 | /* now... we may get called with the object spinlock held, so we |
441 | * complete the cleanup here only if we can immediately acquire the | 432 | * complete the cleanup here only if we can immediately acquire the |