diff options
-rw-r--r-- | drivers/md/bcache/btree.c | 18 | ||||
-rw-r--r-- | drivers/md/bcache/dirent.c | 4 | ||||
-rw-r--r-- | drivers/md/bcache/fs-gc.c | 2 | ||||
-rw-r--r-- | drivers/md/bcache/inode.c | 2 | ||||
-rw-r--r-- | drivers/md/bcache/migrate.c | 2 | ||||
-rw-r--r-- | drivers/md/bcache/request.c | 2 | ||||
-rw-r--r-- | drivers/md/bcache/xattr.c | 2 |
7 files changed, 17 insertions, 15 deletions
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index 02be79a7d547..6edbb06d46f8 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -2804,6 +2804,7 @@ int bch_btree_insert_node(struct btree *b, * Return values: * -EINTR: locking changed, this function should be called again. * -EROFS: cache set read only + * -EIO: journal or btree node IO error */ int bch_btree_insert_at(struct btree_iter *iter, struct keylist *insert_keys, @@ -2837,9 +2838,12 @@ int bch_btree_insert_at(struct btree_iter *iter, * -EAGAIN means we have to drop locks and wait on * mca_cannibalize_lock - btree_iter_unlock() does this */ - if (ret == -EAGAIN) + if (ret == -EAGAIN) { bch_btree_iter_unlock(iter); - else if (ret && ret != -EINTR) + ret = -EINTR; + } + + if (ret && ret != -EINTR) break; traverse: /* @@ -2938,16 +2942,14 @@ int bch_btree_update(struct cache_set *c, enum btree_id id, bch_btree_iter_init_intent(&iter, c, id, k->k.p); - ret = bch_btree_iter_traverse(&iter); - if (unlikely(ret)) - goto out; - u = bch_btree_iter_peek_with_holes(&iter); - BUG_ON(!u.k || bkey_deleted(u.k)); + + if (!u.k || bkey_deleted(u.k)) + return -ENOENT; ret = bch_btree_insert_at(&iter, &keylist_single(k), NULL, journal_seq, 0); -out: ret2 = bch_btree_iter_unlock(&iter); + ret2 = bch_btree_iter_unlock(&iter); return ret ?: ret2; } diff --git a/drivers/md/bcache/dirent.c b/drivers/md/bcache/dirent.c index 9f780b0f4e59..c007b7b0d39d 100644 --- a/drivers/md/bcache/dirent.c +++ b/drivers/md/bcache/dirent.c @@ -187,7 +187,7 @@ insert: ret = bch_btree_insert_at(&iter, &keys, NULL, journal_seq, BTREE_INSERT_ATOMIC); - if (ret != -EINTR && ret != -EAGAIN) + if (ret != -EINTR) break; } else { /* collision */ @@ -247,7 +247,7 @@ int bch_dirent_delete(struct cache_set *c, u64 dir_inum, NULL, NULL, BTREE_INSERT_NOFAIL| BTREE_INSERT_ATOMIC); - if (ret == -EINTR || ret == -EAGAIN) + if (ret == -EINTR) continue; } break; diff --git a/drivers/md/bcache/fs-gc.c b/drivers/md/bcache/fs-gc.c index 47e7a7f093e0..3245e1063898 100644 --- a/drivers/md/bcache/fs-gc.c +++ b/drivers/md/bcache/fs-gc.c @@ -150,7 +150,7 @@ static int bch_gc_walk_inodes(struct cache_set *c, u64 pos, struct nlink *links) ret = bch_gc_do_inode(c, &iter, bkey_s_c_to_inode(k), links[i]); - if (ret == -EAGAIN || ret == -EINTR) + if (ret == -EINTR) continue; if (ret) goto out; diff --git a/drivers/md/bcache/inode.c b/drivers/md/bcache/inode.c index 7061193777e2..53b699920e1d 100644 --- a/drivers/md/bcache/inode.c +++ b/drivers/md/bcache/inode.c @@ -130,7 +130,7 @@ again: NULL, NULL, BTREE_INSERT_ATOMIC); - if (ret == -EINTR || ret == -EAGAIN) + if (ret == -EINTR) continue; bch_btree_iter_unlock(&iter); diff --git a/drivers/md/bcache/migrate.c b/drivers/md/bcache/migrate.c index 65727374b804..66b52c759e39 100644 --- a/drivers/md/bcache/migrate.c +++ b/drivers/md/bcache/migrate.c @@ -563,7 +563,7 @@ int bch_flag_data_bad(struct cache *ca) if (bkey_extent_is_data(k.k)) { ret = bch_flag_key_bad(&iter, ca, bkey_s_c_to_extent(k)); - if (ret == -EINTR || ret == -EAGAIN) + if (ret == -EINTR) continue; if (ret) diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c index e7429d89c5c7..13e08ed237ce 100644 --- a/drivers/md/bcache/request.c +++ b/drivers/md/bcache/request.c @@ -356,7 +356,7 @@ static int cached_dev_cache_miss(struct btree_iter *iter, struct search *s, sectors); ret = bch_btree_insert_check_key(iter, &replace.key); - if (ret == -EINTR || ret == -EAGAIN) + if (ret == -EINTR) return ret; miss = bio_next_split(bio, sectors, GFP_NOIO, &s->d->bio_split); diff --git a/drivers/md/bcache/xattr.c b/drivers/md/bcache/xattr.c index 2f9f176609bc..22e728c18121 100644 --- a/drivers/md/bcache/xattr.c +++ b/drivers/md/bcache/xattr.c @@ -275,7 +275,7 @@ int bch_xattr_set(struct inode *inode, const char *name, insert_flags); } - if (ret != -EINTR && ret != -EAGAIN) + if (ret != -EINTR) break; } out: |