summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2020-11-05 12:16:05 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2020-11-05 12:45:15 -0500
commit3f9052d9351d56f69b5ba15e4b3fdcd392f43226 (patch)
treeacb72b0b2723e3863ed7d6f56a52956495192ae9
parentc6432d6bab26d605ff0bdc0319ca57e60253a445 (diff)
bcachefs: Build fixes for 32bit x86
PAGE_SIZE and size_t are not unsigned longs on 32 bit, annoying... also switch to atomic64_cmpxchg instead of cmpxchg() for journal_seq_copy, as atomic64_cmpxchg has a fallback that uses spinlocks for when it's not supported. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--fs/bcachefs/ec.c2
-rw-r--r--fs/bcachefs/fs.c7
-rw-r--r--fs/bcachefs/io.c2
-rw-r--r--fs/bcachefs/util.c2
4 files changed, 9 insertions, 4 deletions
diff --git a/fs/bcachefs/ec.c b/fs/bcachefs/ec.c
index e4a4805ef218..d7ba0e7fc3b3 100644
--- a/fs/bcachefs/ec.c
+++ b/fs/bcachefs/ec.c
@@ -1586,7 +1586,7 @@ void bch2_stripes_heap_to_text(struct printbuf *out, struct bch_fs *c)
size_t i;
spin_lock(&c->ec_stripes_heap_lock);
- for (i = 0; i < min(h->used, 20UL); i++) {
+ for (i = 0; i < min_t(size_t, h->used, 20); i++) {
m = genradix_ptr(&c->stripes[0], h->data[i].idx);
pr_buf(out, "%zu %u/%u+%u\n", h->data[i].idx,
diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c
index bbb725808a8e..3a8e1089baa1 100644
--- a/fs/bcachefs/fs.c
+++ b/fs/bcachefs/fs.c
@@ -42,6 +42,11 @@ static void journal_seq_copy(struct bch_fs *c,
struct bch_inode_info *dst,
u64 journal_seq)
{
+ /*
+ * atomic64_cmpxchg has a fallback for archs that don't support it,
+ * cmpxchg does not:
+ */
+ atomic64_t *dst_seq = (void *) &dst->ei_journal_seq;
u64 old, v = READ_ONCE(dst->ei_journal_seq);
do {
@@ -49,7 +54,7 @@ static void journal_seq_copy(struct bch_fs *c,
if (old >= journal_seq)
break;
- } while ((v = cmpxchg(&dst->ei_journal_seq, old, journal_seq)) != old);
+ } while ((v = atomic64_cmpxchg(dst_seq, old, journal_seq)) != old);
bch2_journal_set_has_inum(&c->journal, dst->v.i_ino, journal_seq);
}
diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c
index 8add8ccd129d..39a418fd70ab 100644
--- a/fs/bcachefs/io.c
+++ b/fs/bcachefs/io.c
@@ -171,7 +171,7 @@ void bch2_bio_alloc_pages_pool(struct bch_fs *c, struct bio *bio,
while (size) {
struct page *page = __bio_alloc_page_pool(c, &using_mempool);
- unsigned len = min(PAGE_SIZE, size);
+ unsigned len = min_t(size_t, PAGE_SIZE, size);
BUG_ON(!bio_add_page(bio, page, len, 0));
size -= len;
diff --git a/fs/bcachefs/util.c b/fs/bcachefs/util.c
index fd4044a6a08f..2709163e02b5 100644
--- a/fs/bcachefs/util.c
+++ b/fs/bcachefs/util.c
@@ -520,7 +520,7 @@ int bch2_bio_alloc_pages(struct bio *bio, size_t size, gfp_t gfp_mask)
{
while (size) {
struct page *page = alloc_page(gfp_mask);
- unsigned len = min(PAGE_SIZE, size);
+ unsigned len = min_t(size_t, PAGE_SIZE, size);
if (!page)
return -ENOMEM;