* [PATCH 1/2] block: Delete bio_prio()
2024-12-02 11:19 [PATCH 0/2] block: Delete bio_set_prio() and bio_prio() John Garry
@ 2024-12-02 11:19 ` John Garry
2024-12-02 11:19 ` [PATCH 2/2] block: Delete bio_set_prio() John Garry
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: John Garry @ 2024-12-02 11:19 UTC (permalink / raw)
To: axboe
Cc: haris.iqbal, jinpu.wang, colyli, kent.overstreet, agk, snitzer,
mpatocka, linux-block, linux-kernel, linux-bcache, dm-devel,
linux-bcachefs, hch, John Garry
Since commit 43b62ce3ff0a ("block: move bio io prio to a new field"), macro
bio_prio() does nothing but return the value in bio->bi_ioprio. Most other
places just read bio->bi_ioprio directly, so replace bi_ioprio() callsites
with reading bio->bi_ioprio directly and delete that macro.
Signed-off-by: John Garry <john.g.garry@oracle.com>
---
drivers/md/dm-verity-fec.c | 6 +++---
drivers/md/dm-verity-target.c | 4 ++--
include/linux/bio.h | 1 -
3 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/md/dm-verity-fec.c b/drivers/md/dm-verity-fec.c
index 62b1a44b8dd2..b0ee199009fc 100644
--- a/drivers/md/dm-verity-fec.c
+++ b/drivers/md/dm-verity-fec.c
@@ -132,7 +132,7 @@ static int fec_decode_bufs(struct dm_verity *v, struct dm_verity_io *io,
u8 *par, *block;
struct bio *bio = dm_bio_from_per_bio_data(io, v->ti->per_io_data_size);
- par = fec_read_parity(v, rsb, block_offset, &offset, &buf, bio_prio(bio));
+ par = fec_read_parity(v, rsb, block_offset, &offset, &buf, bio->bi_ioprio);
if (IS_ERR(par))
return PTR_ERR(par);
@@ -160,7 +160,7 @@ static int fec_decode_bufs(struct dm_verity *v, struct dm_verity_io *io,
if (offset >= v->fec->io_size) {
dm_bufio_release(buf);
- par = fec_read_parity(v, rsb, block_offset, &offset, &buf, bio_prio(bio));
+ par = fec_read_parity(v, rsb, block_offset, &offset, &buf, bio->bi_ioprio);
if (IS_ERR(par))
return PTR_ERR(par);
}
@@ -250,7 +250,7 @@ static int fec_read_bufs(struct dm_verity *v, struct dm_verity_io *io,
bufio = v->bufio;
}
- bbuf = dm_bufio_read_with_ioprio(bufio, block, &buf, bio_prio(bio));
+ bbuf = dm_bufio_read_with_ioprio(bufio, block, &buf, bio->bi_ioprio);
if (IS_ERR(bbuf)) {
DMWARN_LIMIT("%s: FEC %llu: read failed (%llu): %ld",
v->data_dev->name,
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index 47d595f6a76e..e86c1431b108 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -321,7 +321,7 @@ static int verity_verify_level(struct dm_verity *v, struct dm_verity_io *io,
}
} else {
data = dm_bufio_read_with_ioprio(v->bufio, hash_block,
- &buf, bio_prio(bio));
+ &buf, bio->bi_ioprio);
}
if (IS_ERR(data))
@@ -789,7 +789,7 @@ static int verity_map(struct dm_target *ti, struct bio *bio)
verity_fec_init_io(io);
- verity_submit_prefetch(v, io, bio_prio(bio));
+ verity_submit_prefetch(v, io, bio->bi_ioprio);
submit_bio_noacct(bio);
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 60830a6a5939..61e6db44d464 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -19,7 +19,6 @@ static inline unsigned int bio_max_segs(unsigned int nr_segs)
return min(nr_segs, BIO_MAX_VECS);
}
-#define bio_prio(bio) (bio)->bi_ioprio
#define bio_set_prio(bio, prio) ((bio)->bi_ioprio = prio)
#define bio_iter_iovec(bio, iter) \
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 2/2] block: Delete bio_set_prio()
2024-12-02 11:19 [PATCH 0/2] block: Delete bio_set_prio() and bio_prio() John Garry
2024-12-02 11:19 ` [PATCH 1/2] block: Delete bio_prio() John Garry
@ 2024-12-02 11:19 ` John Garry
2024-12-02 11:33 ` Jinpu Wang
2024-12-02 16:21 ` Coly Li
2024-12-03 2:10 ` [PATCH 0/2] block: Delete bio_set_prio() and bio_prio() Chaitanya Kulkarni
2024-12-03 13:42 ` Jens Axboe
3 siblings, 2 replies; 7+ messages in thread
From: John Garry @ 2024-12-02 11:19 UTC (permalink / raw)
To: axboe
Cc: haris.iqbal, jinpu.wang, colyli, kent.overstreet, agk, snitzer,
mpatocka, linux-block, linux-kernel, linux-bcache, dm-devel,
linux-bcachefs, hch, John Garry
Since commit 43b62ce3ff0a ("block: move bio io prio to a new field"), macro
bio_set_prio() does nothing but set bio->bi_ioprio. All other places just
set bio->bi_ioprio directly, so replace bio_set_prio() remaining
callsites with setting bio->bi_ioprio directly and delete that macro.
Signed-off-by: John Garry <john.g.garry@oracle.com>
---
drivers/block/rnbd/rnbd-srv.c | 2 +-
drivers/md/bcache/movinggc.c | 2 +-
drivers/md/bcache/writeback.c | 2 +-
fs/bcachefs/move.c | 6 +++---
include/linux/bio.h | 2 --
5 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c
index 08ce6d96d04c..2ee6e9bd4e28 100644
--- a/drivers/block/rnbd/rnbd-srv.c
+++ b/drivers/block/rnbd/rnbd-srv.c
@@ -167,7 +167,7 @@ static int process_rdma(struct rnbd_srv_session *srv_sess,
bio->bi_iter.bi_sector = le64_to_cpu(msg->sector);
prio = srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
usrlen < sizeof(*msg) ? 0 : le16_to_cpu(msg->prio);
- bio_set_prio(bio, prio);
+ bio->bi_ioprio = prio;
submit_bio(bio);
diff --git a/drivers/md/bcache/movinggc.c b/drivers/md/bcache/movinggc.c
index ef6abf33f926..45ca134cbf02 100644
--- a/drivers/md/bcache/movinggc.c
+++ b/drivers/md/bcache/movinggc.c
@@ -82,7 +82,7 @@ static void moving_init(struct moving_io *io)
bio_init(bio, NULL, bio->bi_inline_vecs,
DIV_ROUND_UP(KEY_SIZE(&io->w->key), PAGE_SECTORS), 0);
bio_get(bio);
- bio_set_prio(bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
+ bio->bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
bio->bi_iter.bi_size = KEY_SIZE(&io->w->key) << 9;
bio->bi_private = &io->cl;
diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
index c1d28e365910..453efbbdc8ee 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -334,7 +334,7 @@ static void dirty_init(struct keybuf_key *w)
bio_init(bio, NULL, bio->bi_inline_vecs,
DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS), 0);
if (!io->dc->writeback_percent)
- bio_set_prio(bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
+ bio->bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
bio->bi_iter.bi_size = KEY_SIZE(&w->key) << 9;
bio->bi_private = w;
diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
index 0ef4a86850bb..67fb651f4af4 100644
--- a/fs/bcachefs/move.c
+++ b/fs/bcachefs/move.c
@@ -292,8 +292,8 @@ int bch2_move_extent(struct moving_context *ctxt,
io->write_sectors = k.k->size;
bio_init(&io->write.op.wbio.bio, NULL, io->bi_inline_vecs, pages, 0);
- bio_set_prio(&io->write.op.wbio.bio,
- IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
+ io->write.op.wbio.bio.bi_ioprio =
+ IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
if (bch2_bio_alloc_pages(&io->write.op.wbio.bio, sectors << 9,
GFP_KERNEL))
@@ -303,7 +303,7 @@ int bch2_move_extent(struct moving_context *ctxt,
io->rbio.opts = io_opts;
bio_init(&io->rbio.bio, NULL, io->bi_inline_vecs, pages, 0);
io->rbio.bio.bi_vcnt = pages;
- bio_set_prio(&io->rbio.bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
+ io->rbio.bio.bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
io->rbio.bio.bi_iter.bi_size = sectors << 9;
io->rbio.bio.bi_opf = REQ_OP_READ;
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 61e6db44d464..2e7bd5d66ef4 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -19,8 +19,6 @@ static inline unsigned int bio_max_segs(unsigned int nr_segs)
return min(nr_segs, BIO_MAX_VECS);
}
-#define bio_set_prio(bio, prio) ((bio)->bi_ioprio = prio)
-
#define bio_iter_iovec(bio, iter) \
bvec_iter_bvec((bio)->bi_io_vec, (iter))
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH 2/2] block: Delete bio_set_prio()
2024-12-02 11:19 ` [PATCH 2/2] block: Delete bio_set_prio() John Garry
@ 2024-12-02 11:33 ` Jinpu Wang
2024-12-02 16:21 ` Coly Li
1 sibling, 0 replies; 7+ messages in thread
From: Jinpu Wang @ 2024-12-02 11:33 UTC (permalink / raw)
To: John Garry
Cc: axboe, haris.iqbal, colyli, kent.overstreet, agk, snitzer,
mpatocka, linux-block, linux-kernel, linux-bcache, dm-devel,
linux-bcachefs, hch
On Mon, Dec 2, 2024 at 12:20 PM John Garry <john.g.garry@oracle.com> wrote:
>
> Since commit 43b62ce3ff0a ("block: move bio io prio to a new field"), macro
> bio_set_prio() does nothing but set bio->bi_ioprio. All other places just
> set bio->bi_ioprio directly, so replace bio_set_prio() remaining
> callsites with setting bio->bi_ioprio directly and delete that macro.
>
> Signed-off-by: John Garry <john.g.garry@oracle.com>
lgtm, thx!
Acked-by: Jack Wang <jinpu.wang@ionos.com>
> ---
> drivers/block/rnbd/rnbd-srv.c | 2 +-
> drivers/md/bcache/movinggc.c | 2 +-
> drivers/md/bcache/writeback.c | 2 +-
> fs/bcachefs/move.c | 6 +++---
> include/linux/bio.h | 2 --
> 5 files changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c
> index 08ce6d96d04c..2ee6e9bd4e28 100644
> --- a/drivers/block/rnbd/rnbd-srv.c
> +++ b/drivers/block/rnbd/rnbd-srv.c
> @@ -167,7 +167,7 @@ static int process_rdma(struct rnbd_srv_session *srv_sess,
> bio->bi_iter.bi_sector = le64_to_cpu(msg->sector);
> prio = srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
> usrlen < sizeof(*msg) ? 0 : le16_to_cpu(msg->prio);
> - bio_set_prio(bio, prio);
> + bio->bi_ioprio = prio;
>
> submit_bio(bio);
>
> diff --git a/drivers/md/bcache/movinggc.c b/drivers/md/bcache/movinggc.c
> index ef6abf33f926..45ca134cbf02 100644
> --- a/drivers/md/bcache/movinggc.c
> +++ b/drivers/md/bcache/movinggc.c
> @@ -82,7 +82,7 @@ static void moving_init(struct moving_io *io)
> bio_init(bio, NULL, bio->bi_inline_vecs,
> DIV_ROUND_UP(KEY_SIZE(&io->w->key), PAGE_SECTORS), 0);
> bio_get(bio);
> - bio_set_prio(bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
> + bio->bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
>
> bio->bi_iter.bi_size = KEY_SIZE(&io->w->key) << 9;
> bio->bi_private = &io->cl;
> diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
> index c1d28e365910..453efbbdc8ee 100644
> --- a/drivers/md/bcache/writeback.c
> +++ b/drivers/md/bcache/writeback.c
> @@ -334,7 +334,7 @@ static void dirty_init(struct keybuf_key *w)
> bio_init(bio, NULL, bio->bi_inline_vecs,
> DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS), 0);
> if (!io->dc->writeback_percent)
> - bio_set_prio(bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
> + bio->bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
>
> bio->bi_iter.bi_size = KEY_SIZE(&w->key) << 9;
> bio->bi_private = w;
> diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
> index 0ef4a86850bb..67fb651f4af4 100644
> --- a/fs/bcachefs/move.c
> +++ b/fs/bcachefs/move.c
> @@ -292,8 +292,8 @@ int bch2_move_extent(struct moving_context *ctxt,
> io->write_sectors = k.k->size;
>
> bio_init(&io->write.op.wbio.bio, NULL, io->bi_inline_vecs, pages, 0);
> - bio_set_prio(&io->write.op.wbio.bio,
> - IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
> + io->write.op.wbio.bio.bi_ioprio =
> + IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
>
> if (bch2_bio_alloc_pages(&io->write.op.wbio.bio, sectors << 9,
> GFP_KERNEL))
> @@ -303,7 +303,7 @@ int bch2_move_extent(struct moving_context *ctxt,
> io->rbio.opts = io_opts;
> bio_init(&io->rbio.bio, NULL, io->bi_inline_vecs, pages, 0);
> io->rbio.bio.bi_vcnt = pages;
> - bio_set_prio(&io->rbio.bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
> + io->rbio.bio.bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
> io->rbio.bio.bi_iter.bi_size = sectors << 9;
>
> io->rbio.bio.bi_opf = REQ_OP_READ;
> diff --git a/include/linux/bio.h b/include/linux/bio.h
> index 61e6db44d464..2e7bd5d66ef4 100644
> --- a/include/linux/bio.h
> +++ b/include/linux/bio.h
> @@ -19,8 +19,6 @@ static inline unsigned int bio_max_segs(unsigned int nr_segs)
> return min(nr_segs, BIO_MAX_VECS);
> }
>
> -#define bio_set_prio(bio, prio) ((bio)->bi_ioprio = prio)
> -
> #define bio_iter_iovec(bio, iter) \
> bvec_iter_bvec((bio)->bi_io_vec, (iter))
>
> --
> 2.31.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 2/2] block: Delete bio_set_prio()
2024-12-02 11:19 ` [PATCH 2/2] block: Delete bio_set_prio() John Garry
2024-12-02 11:33 ` Jinpu Wang
@ 2024-12-02 16:21 ` Coly Li
1 sibling, 0 replies; 7+ messages in thread
From: Coly Li @ 2024-12-02 16:21 UTC (permalink / raw)
To: John Garry
Cc: axboe, haris.iqbal, jinpu.wang, kent.overstreet, agk, snitzer,
mpatocka, linux-block, linux-kernel, linux-bcache, dm-devel,
linux-bcachefs, hch
On Mon, Dec 02, 2024 at 11:19:57AM +0000, John Garry wrote:
> Since commit 43b62ce3ff0a ("block: move bio io prio to a new field"), macro
> bio_set_prio() does nothing but set bio->bi_ioprio. All other places just
> set bio->bi_ioprio directly, so replace bio_set_prio() remaining
> callsites with setting bio->bi_ioprio directly and delete that macro.
>
> Signed-off-by: John Garry <john.g.garry@oracle.com>
> ---
> drivers/block/rnbd/rnbd-srv.c | 2 +-
> drivers/md/bcache/movinggc.c | 2 +-
> drivers/md/bcache/writeback.c | 2 +-
> fs/bcachefs/move.c | 6 +++---
> include/linux/bio.h | 2 --
> 5 files changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c
> index 08ce6d96d04c..2ee6e9bd4e28 100644
> --- a/drivers/block/rnbd/rnbd-srv.c
> +++ b/drivers/block/rnbd/rnbd-srv.c
> @@ -167,7 +167,7 @@ static int process_rdma(struct rnbd_srv_session *srv_sess,
> bio->bi_iter.bi_sector = le64_to_cpu(msg->sector);
> prio = srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
> usrlen < sizeof(*msg) ? 0 : le16_to_cpu(msg->prio);
> - bio_set_prio(bio, prio);
> + bio->bi_ioprio = prio;
>
> submit_bio(bio);
>
> diff --git a/drivers/md/bcache/movinggc.c b/drivers/md/bcache/movinggc.c
> index ef6abf33f926..45ca134cbf02 100644
> --- a/drivers/md/bcache/movinggc.c
> +++ b/drivers/md/bcache/movinggc.c
> @@ -82,7 +82,7 @@ static void moving_init(struct moving_io *io)
> bio_init(bio, NULL, bio->bi_inline_vecs,
> DIV_ROUND_UP(KEY_SIZE(&io->w->key), PAGE_SECTORS), 0);
> bio_get(bio);
> - bio_set_prio(bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
> + bio->bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
>
> bio->bi_iter.bi_size = KEY_SIZE(&io->w->key) << 9;
> bio->bi_private = &io->cl;
> diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
> index c1d28e365910..453efbbdc8ee 100644
> --- a/drivers/md/bcache/writeback.c
> +++ b/drivers/md/bcache/writeback.c
> @@ -334,7 +334,7 @@ static void dirty_init(struct keybuf_key *w)
> bio_init(bio, NULL, bio->bi_inline_vecs,
> DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS), 0);
> if (!io->dc->writeback_percent)
> - bio_set_prio(bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
> + bio->bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
>
> bio->bi_iter.bi_size = KEY_SIZE(&w->key) << 9;
> bio->bi_private = w;
For bcache part, Acked-by: Coly Li <colyli@suse.de>
Thanks.
Coly Li
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] block: Delete bio_set_prio() and bio_prio()
2024-12-02 11:19 [PATCH 0/2] block: Delete bio_set_prio() and bio_prio() John Garry
2024-12-02 11:19 ` [PATCH 1/2] block: Delete bio_prio() John Garry
2024-12-02 11:19 ` [PATCH 2/2] block: Delete bio_set_prio() John Garry
@ 2024-12-03 2:10 ` Chaitanya Kulkarni
2024-12-03 13:42 ` Jens Axboe
3 siblings, 0 replies; 7+ messages in thread
From: Chaitanya Kulkarni @ 2024-12-03 2:10 UTC (permalink / raw)
To: John Garry, axboe@kernel.dk
Cc: haris.iqbal@ionos.com, jinpu.wang@ionos.com, colyli@suse.de,
kent.overstreet@linux.dev, agk@redhat.com, snitzer@kernel.org,
mpatocka@redhat.com, linux-block@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-bcache@vger.kernel.org,
dm-devel@lists.linux.dev, linux-bcachefs@vger.kernel.org,
hch@lst.de
On 12/2/24 03:19, John Garry wrote:
> Macros bio_set_prio() and bio_prio() do nothing special in terms of
> setting and getting the bio io prio member, so just delete them.
>
> Prior to commit 43b62ce3ff0a, they would actually encode and decode the
> prio in the now-deleted bi_rw member.
Looks good.
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
-ck
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] block: Delete bio_set_prio() and bio_prio()
2024-12-02 11:19 [PATCH 0/2] block: Delete bio_set_prio() and bio_prio() John Garry
` (2 preceding siblings ...)
2024-12-03 2:10 ` [PATCH 0/2] block: Delete bio_set_prio() and bio_prio() Chaitanya Kulkarni
@ 2024-12-03 13:42 ` Jens Axboe
3 siblings, 0 replies; 7+ messages in thread
From: Jens Axboe @ 2024-12-03 13:42 UTC (permalink / raw)
To: John Garry
Cc: haris.iqbal, jinpu.wang, colyli, kent.overstreet, agk, snitzer,
mpatocka, linux-block, linux-kernel, linux-bcache, dm-devel,
linux-bcachefs, hch
On Mon, 02 Dec 2024 11:19:55 +0000, John Garry wrote:
> Macros bio_set_prio() and bio_prio() do nothing special in terms of
> setting and getting the bio io prio member, so just delete them.
>
> Prior to commit 43b62ce3ff0a, they would actually encode and decode the
> prio in the now-deleted bi_rw member.
>
> John Garry (2):
> block: Delete bio_prio()
> block: Delete bio_set_prio()
>
> [...]
Applied, thanks!
[1/2] block: Delete bio_prio()
commit: 099d214fc7abc3fec0f38d10bec31ac7acce8d13
[2/2] block: Delete bio_set_prio()
commit: 77cfdf838d8467d3ca44058caff7c1727080efb2
Best regards,
--
Jens Axboe
^ permalink raw reply [flat|nested] 7+ messages in thread