From: "Darrick J. Wong" <djwong@kernel.org>
To: Sarthak Kukreti <sarthakkukreti@chromium.org>
Cc: Jens Axboe <axboe@kernel.dk>,
Christoph Hellwig <hch@infradead.org>,
Theodore Ts'o <tytso@mit.edu>,
"Michael S. Tsirkin" <mst@redhat.com>,
Jason Wang <jasowang@redhat.com>,
Bart Van Assche <bvanassche@google.com>,
Mike Snitzer <snitzer@kernel.org>,
linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
dm-devel@redhat.com, Andreas Dilger <adilger.kernel@dilger.ca>,
Stefan Hajnoczi <stefanha@redhat.com>,
linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,
Brian Foster <bfoster@redhat.com>,
Alasdair Kergon <agk@redhat.com>
Subject: Re: [dm-devel] [PATCH v7 5/5] loop: Add support for provision requests
Date: Mon, 22 May 2023 18:22:52 -0700 [thread overview]
Message-ID: <20230523012252.GF11598@frogsfrogsfrogs> (raw)
In-Reply-To: <20230522221000.603769-1-sarthakkukreti@chromium.org>
On Mon, May 22, 2023 at 03:09:55PM -0700, Sarthak Kukreti wrote:
> On Mon, May 22, 2023 at 9:37 AM Darrick J. Wong <djwong@kernel.org> wrote:
> >
> > If someone calls fallocate(UNSHARE_RANGE) on a loop bdev, shouldn't
> > there be a way to pass that through to the fallocate call to the backing
> > file?
> >
> > --D
> >
>
> Yeah, I think we could add a REQ_UNSHARE bit (similar to REQ_NOUNMAP) to pass down the intent to the backing file (and possibly beyond...).
>
> I took a stab at implementing it as a follow up patch so that there's
> less review churn on the current series. If it looks good, I can add
> it to the end of the series (or incorporate this into the existing
> block and loop patches):
It looks like a reasonable addition to the end of the series, assuming
that filling holes in thinp devices is cheap but unsharing snapshot
blocks is not.
> From: Sarthak Kukreti <sarthakkukreti@chromium.org>
> Date: Mon, 22 May 2023 14:18:15 -0700
> Subject: [PATCH] block: Pass unshare intent via REQ_OP_PROVISION
>
> Allow REQ_OP_PROVISION to pass in an extra REQ_UNSHARE bit to
> annotate unshare requests to underlying layers. Layers that support
> FALLOC_FL_UNSHARE will be able to use this as an indicator of which
> fallocate() mode to use.
> Signed-off-by: Sarthak Kukreti <sarthakkukreti@chromium.org>
> ---
> block/blk-lib.c | 6 +++++-
> block/fops.c | 6 +++++-
> drivers/block/loop.c | 35 +++++++++++++++++++++++++++++------
> include/linux/blk_types.h | 3 +++
> include/linux/blkdev.h | 3 ++-
> 5 files changed, 44 insertions(+), 9 deletions(-)
>
> diff --git a/block/blk-lib.c b/block/blk-lib.c
> index 3cff5fb654f5..bea6f5a700b3 100644
> --- a/block/blk-lib.c
> +++ b/block/blk-lib.c
> @@ -350,6 +350,7 @@ EXPORT_SYMBOL(blkdev_issue_secure_erase);
> * @sector: start sector
> * @nr_sects: number of sectors to provision
> * @gfp_mask: memory allocation flags (for bio_alloc)
> + * @flags: controls detailed behavior
> *
> * Description:
> * Issues a provision request to the block device for the range of sectors.
> @@ -357,7 +358,7 @@ EXPORT_SYMBOL(blkdev_issue_secure_erase);
> * underlying storage pool to allocate space for this block range.
> */
> int blkdev_issue_provision(struct block_device *bdev, sector_t sector,
> - sector_t nr_sects, gfp_t gfp)
> + sector_t nr_sects, gfp_t gfp, unsigned flags)
> {
> sector_t bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
> unsigned int max_sectors = bdev_max_provision_sectors(bdev);
> @@ -380,6 +381,9 @@ int blkdev_issue_provision(struct block_device *bdev, sector_t sector,
> bio->bi_iter.bi_sector = sector;
> bio->bi_iter.bi_size = req_sects << SECTOR_SHIFT;
>
> + if (flags & BLKDEV_UNSHARE_RANGE)
This is a provisioning flag, shouldn't this be ...
BLKDEV_PROVISION_UNSHARE or something?
> + bio->bi_opf |= REQ_UNSHARE;
> +
> sector += req_sects;
> nr_sects -= req_sects;
> if (!nr_sects) {
> diff --git a/block/fops.c b/block/fops.c
> index be2e41f160bf..6848756f0557 100644
> --- a/block/fops.c
> +++ b/block/fops.c
> @@ -659,7 +659,11 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
> case FALLOC_FL_KEEP_SIZE:
> case FALLOC_FL_UNSHARE_RANGE | FALLOC_FL_KEEP_SIZE:
> error = blkdev_issue_provision(bdev, start >> SECTOR_SHIFT,
> - len >> SECTOR_SHIFT, GFP_KERNEL);
> + len >> SECTOR_SHIFT, GFP_KERNEL,
> + (mode &
> + FALLOC_FL_UNSHARE_RANGE) ?
> + BLKDEV_UNSHARE_RANGE :
> + 0);
You might want to do something about the six level indent here;
Linus hates that.
--D
> break;
> case FALLOC_FL_ZERO_RANGE:
> case FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE:
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index 7fe1a6629754..c844b145d666 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -306,6 +306,30 @@ static int lo_read_simple(struct loop_device *lo, struct request *rq,
> return 0;
> }
>
> +static bool validate_fallocate_mode(struct loop_device *lo, int mode)
> +{
> + bool ret = true;
> +
> + switch (mode) {
> + case FALLOC_FL_PUNCH_HOLE:
> + case FALLOC_FL_ZERO_RANGE:
> + if (!bdev_max_discard_sectors(lo->lo_device))
> + ret = false;
> + break;
> + case 0:
> + case FALLOC_FL_UNSHARE_RANGE:
> + if (!bdev_max_provision_sectors(lo->lo_device))
> + ret = false;
> + break;
> +
> + default:
> + ret = false;
> + }
> +
> + return ret;
> +}
> +
> +
> static int lo_fallocate(struct loop_device *lo, struct request *rq, loff_t pos,
> int mode)
> {
> @@ -316,11 +340,7 @@ static int lo_fallocate(struct loop_device *lo, struct request *rq, loff_t pos,
> struct file *file = lo->lo_backing_file;
> int ret;
>
> - if (mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE) &&
> - !bdev_max_discard_sectors(lo->lo_device))
> - return -EOPNOTSUPP;
> -
> - if (mode == 0 && !bdev_max_provision_sectors(lo->lo_device))
> + if (!validate_fallocate_mode(lo, mode))
> return -EOPNOTSUPP;
>
> mode |= FALLOC_FL_KEEP_SIZE;
> @@ -493,7 +513,10 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq)
> case REQ_OP_DISCARD:
> return lo_fallocate(lo, rq, pos, FALLOC_FL_PUNCH_HOLE);
> case REQ_OP_PROVISION:
> - return lo_fallocate(lo, rq, pos, 0);
> + return lo_fallocate(lo, rq, pos,
> + (rq->cmd_flags & REQ_UNSHARE) ?
> + FALLOC_FL_UNSHARE_RANGE :
> + 0);
> case REQ_OP_WRITE:
> if (cmd->use_aio)
> return lo_rw_aio(lo, cmd, pos, ITER_SOURCE);
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index b7bb0226fdee..1a536fd897cb 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -423,6 +423,8 @@ enum req_flag_bits {
> */
> /* for REQ_OP_WRITE_ZEROES: */
> __REQ_NOUNMAP, /* do not free blocks when zeroing */
> + /* for REQ_OP_PROVISION: */
> + __REQ_UNSHARE, /* unshare blocks */
>
> __REQ_NR_BITS, /* stops here */
> };
> @@ -451,6 +453,7 @@ enum req_flag_bits {
> #define REQ_FS_PRIVATE (__force blk_opf_t)(1ULL << __REQ_FS_PRIVATE)
>
> #define REQ_NOUNMAP (__force blk_opf_t)(1ULL << __REQ_NOUNMAP)
> +#define REQ_UNSHARE (__force blk_opf_t)(1ULL << __REQ_UNSHARE)
>
> #define REQ_FAILFAST_MASK \
> (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index 462ce586d46f..60c09b0d3fc9 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -1049,10 +1049,11 @@ int blkdev_issue_secure_erase(struct block_device *bdev, sector_t sector,
> sector_t nr_sects, gfp_t gfp);
>
> extern int blkdev_issue_provision(struct block_device *bdev, sector_t sector,
> - sector_t nr_sects, gfp_t gfp_mask);
> + sector_t nr_sects, gfp_t gfp_mask, unsigned int flags);
>
> #define BLKDEV_ZERO_NOUNMAP (1 << 0) /* do not free blocks */
> #define BLKDEV_ZERO_NOFALLBACK (1 << 1) /* don't write explicit zeroes */
> +#define BLKDEV_UNSHARE_RANGE (1 << 2) /* unshare range on provision */
>
> extern int __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
> sector_t nr_sects, gfp_t gfp_mask, struct bio **biop,
> --
> 2.39.2
>
--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel
WARNING: multiple messages have this Message-ID (diff)
From: "Darrick J. Wong" <djwong@kernel.org>
To: Sarthak Kukreti <sarthakkukreti@chromium.org>
Cc: dm-devel@redhat.com, linux-block@vger.kernel.org,
linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
"Michael S. Tsirkin" <mst@redhat.com>,
Jason Wang <jasowang@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Alasdair Kergon <agk@redhat.com>,
Mike Snitzer <snitzer@kernel.org>,
Christoph Hellwig <hch@infradead.org>,
Brian Foster <bfoster@redhat.com>, Theodore Ts'o <tytso@mit.edu>,
Andreas Dilger <adilger.kernel@dilger.ca>,
Bart Van Assche <bvanassche@google.com>
Subject: Re: [PATCH v7 5/5] loop: Add support for provision requests
Date: Mon, 22 May 2023 18:22:52 -0700 [thread overview]
Message-ID: <20230523012252.GF11598@frogsfrogsfrogs> (raw)
In-Reply-To: <20230522221000.603769-1-sarthakkukreti@chromium.org>
On Mon, May 22, 2023 at 03:09:55PM -0700, Sarthak Kukreti wrote:
> On Mon, May 22, 2023 at 9:37 AM Darrick J. Wong <djwong@kernel.org> wrote:
> >
> > If someone calls fallocate(UNSHARE_RANGE) on a loop bdev, shouldn't
> > there be a way to pass that through to the fallocate call to the backing
> > file?
> >
> > --D
> >
>
> Yeah, I think we could add a REQ_UNSHARE bit (similar to REQ_NOUNMAP) to pass down the intent to the backing file (and possibly beyond...).
>
> I took a stab at implementing it as a follow up patch so that there's
> less review churn on the current series. If it looks good, I can add
> it to the end of the series (or incorporate this into the existing
> block and loop patches):
It looks like a reasonable addition to the end of the series, assuming
that filling holes in thinp devices is cheap but unsharing snapshot
blocks is not.
> From: Sarthak Kukreti <sarthakkukreti@chromium.org>
> Date: Mon, 22 May 2023 14:18:15 -0700
> Subject: [PATCH] block: Pass unshare intent via REQ_OP_PROVISION
>
> Allow REQ_OP_PROVISION to pass in an extra REQ_UNSHARE bit to
> annotate unshare requests to underlying layers. Layers that support
> FALLOC_FL_UNSHARE will be able to use this as an indicator of which
> fallocate() mode to use.
> Signed-off-by: Sarthak Kukreti <sarthakkukreti@chromium.org>
> ---
> block/blk-lib.c | 6 +++++-
> block/fops.c | 6 +++++-
> drivers/block/loop.c | 35 +++++++++++++++++++++++++++++------
> include/linux/blk_types.h | 3 +++
> include/linux/blkdev.h | 3 ++-
> 5 files changed, 44 insertions(+), 9 deletions(-)
>
> diff --git a/block/blk-lib.c b/block/blk-lib.c
> index 3cff5fb654f5..bea6f5a700b3 100644
> --- a/block/blk-lib.c
> +++ b/block/blk-lib.c
> @@ -350,6 +350,7 @@ EXPORT_SYMBOL(blkdev_issue_secure_erase);
> * @sector: start sector
> * @nr_sects: number of sectors to provision
> * @gfp_mask: memory allocation flags (for bio_alloc)
> + * @flags: controls detailed behavior
> *
> * Description:
> * Issues a provision request to the block device for the range of sectors.
> @@ -357,7 +358,7 @@ EXPORT_SYMBOL(blkdev_issue_secure_erase);
> * underlying storage pool to allocate space for this block range.
> */
> int blkdev_issue_provision(struct block_device *bdev, sector_t sector,
> - sector_t nr_sects, gfp_t gfp)
> + sector_t nr_sects, gfp_t gfp, unsigned flags)
> {
> sector_t bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
> unsigned int max_sectors = bdev_max_provision_sectors(bdev);
> @@ -380,6 +381,9 @@ int blkdev_issue_provision(struct block_device *bdev, sector_t sector,
> bio->bi_iter.bi_sector = sector;
> bio->bi_iter.bi_size = req_sects << SECTOR_SHIFT;
>
> + if (flags & BLKDEV_UNSHARE_RANGE)
This is a provisioning flag, shouldn't this be ...
BLKDEV_PROVISION_UNSHARE or something?
> + bio->bi_opf |= REQ_UNSHARE;
> +
> sector += req_sects;
> nr_sects -= req_sects;
> if (!nr_sects) {
> diff --git a/block/fops.c b/block/fops.c
> index be2e41f160bf..6848756f0557 100644
> --- a/block/fops.c
> +++ b/block/fops.c
> @@ -659,7 +659,11 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
> case FALLOC_FL_KEEP_SIZE:
> case FALLOC_FL_UNSHARE_RANGE | FALLOC_FL_KEEP_SIZE:
> error = blkdev_issue_provision(bdev, start >> SECTOR_SHIFT,
> - len >> SECTOR_SHIFT, GFP_KERNEL);
> + len >> SECTOR_SHIFT, GFP_KERNEL,
> + (mode &
> + FALLOC_FL_UNSHARE_RANGE) ?
> + BLKDEV_UNSHARE_RANGE :
> + 0);
You might want to do something about the six level indent here;
Linus hates that.
--D
> break;
> case FALLOC_FL_ZERO_RANGE:
> case FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE:
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index 7fe1a6629754..c844b145d666 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -306,6 +306,30 @@ static int lo_read_simple(struct loop_device *lo, struct request *rq,
> return 0;
> }
>
> +static bool validate_fallocate_mode(struct loop_device *lo, int mode)
> +{
> + bool ret = true;
> +
> + switch (mode) {
> + case FALLOC_FL_PUNCH_HOLE:
> + case FALLOC_FL_ZERO_RANGE:
> + if (!bdev_max_discard_sectors(lo->lo_device))
> + ret = false;
> + break;
> + case 0:
> + case FALLOC_FL_UNSHARE_RANGE:
> + if (!bdev_max_provision_sectors(lo->lo_device))
> + ret = false;
> + break;
> +
> + default:
> + ret = false;
> + }
> +
> + return ret;
> +}
> +
> +
> static int lo_fallocate(struct loop_device *lo, struct request *rq, loff_t pos,
> int mode)
> {
> @@ -316,11 +340,7 @@ static int lo_fallocate(struct loop_device *lo, struct request *rq, loff_t pos,
> struct file *file = lo->lo_backing_file;
> int ret;
>
> - if (mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE) &&
> - !bdev_max_discard_sectors(lo->lo_device))
> - return -EOPNOTSUPP;
> -
> - if (mode == 0 && !bdev_max_provision_sectors(lo->lo_device))
> + if (!validate_fallocate_mode(lo, mode))
> return -EOPNOTSUPP;
>
> mode |= FALLOC_FL_KEEP_SIZE;
> @@ -493,7 +513,10 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq)
> case REQ_OP_DISCARD:
> return lo_fallocate(lo, rq, pos, FALLOC_FL_PUNCH_HOLE);
> case REQ_OP_PROVISION:
> - return lo_fallocate(lo, rq, pos, 0);
> + return lo_fallocate(lo, rq, pos,
> + (rq->cmd_flags & REQ_UNSHARE) ?
> + FALLOC_FL_UNSHARE_RANGE :
> + 0);
> case REQ_OP_WRITE:
> if (cmd->use_aio)
> return lo_rw_aio(lo, cmd, pos, ITER_SOURCE);
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index b7bb0226fdee..1a536fd897cb 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -423,6 +423,8 @@ enum req_flag_bits {
> */
> /* for REQ_OP_WRITE_ZEROES: */
> __REQ_NOUNMAP, /* do not free blocks when zeroing */
> + /* for REQ_OP_PROVISION: */
> + __REQ_UNSHARE, /* unshare blocks */
>
> __REQ_NR_BITS, /* stops here */
> };
> @@ -451,6 +453,7 @@ enum req_flag_bits {
> #define REQ_FS_PRIVATE (__force blk_opf_t)(1ULL << __REQ_FS_PRIVATE)
>
> #define REQ_NOUNMAP (__force blk_opf_t)(1ULL << __REQ_NOUNMAP)
> +#define REQ_UNSHARE (__force blk_opf_t)(1ULL << __REQ_UNSHARE)
>
> #define REQ_FAILFAST_MASK \
> (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index 462ce586d46f..60c09b0d3fc9 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -1049,10 +1049,11 @@ int blkdev_issue_secure_erase(struct block_device *bdev, sector_t sector,
> sector_t nr_sects, gfp_t gfp);
>
> extern int blkdev_issue_provision(struct block_device *bdev, sector_t sector,
> - sector_t nr_sects, gfp_t gfp_mask);
> + sector_t nr_sects, gfp_t gfp_mask, unsigned int flags);
>
> #define BLKDEV_ZERO_NOUNMAP (1 << 0) /* do not free blocks */
> #define BLKDEV_ZERO_NOFALLBACK (1 << 1) /* don't write explicit zeroes */
> +#define BLKDEV_UNSHARE_RANGE (1 << 2) /* unshare range on provision */
>
> extern int __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
> sector_t nr_sects, gfp_t gfp_mask, struct bio **biop,
> --
> 2.39.2
>
next prev parent reply other threads:[~2023-05-23 1:23 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-18 22:33 [dm-devel] [PATCH v7 0/5] Introduce provisioning primitives Sarthak Kukreti
2023-05-18 22:33 ` Sarthak Kukreti
2023-05-18 22:33 ` [dm-devel] [PATCH v7 1/5] block: Don't invalidate pagecache for invalid falloc modes Sarthak Kukreti
2023-05-18 22:33 ` Sarthak Kukreti
2023-05-19 4:09 ` [dm-devel] " Christoph Hellwig
2023-05-19 4:09 ` Christoph Hellwig
2023-05-19 15:17 ` [dm-devel] " Darrick J. Wong
2023-05-19 15:17 ` Darrick J. Wong
2023-05-18 22:33 ` [dm-devel] [PATCH v7 2/5] block: Introduce provisioning primitives Sarthak Kukreti
2023-05-18 22:33 ` Sarthak Kukreti
2023-05-19 4:18 ` [dm-devel] " Christoph Hellwig
2023-05-19 4:18 ` Christoph Hellwig
2023-06-09 20:00 ` [dm-devel] " Mike Snitzer
2023-06-09 20:00 ` Mike Snitzer
2023-05-18 22:33 ` [dm-devel] [PATCH v7 3/5] dm: Add block provisioning support Sarthak Kukreti
2023-05-18 22:33 ` Sarthak Kukreti
2023-05-18 22:33 ` [dm-devel] [PATCH v7 4/5] dm-thin: Add REQ_OP_PROVISION support Sarthak Kukreti
2023-05-18 22:33 ` Sarthak Kukreti
2023-05-19 15:23 ` [dm-devel] " Mike Snitzer
2023-05-19 15:23 ` Mike Snitzer
2023-06-08 21:24 ` [dm-devel] " Mike Snitzer
2023-06-08 21:24 ` Mike Snitzer
2023-06-09 0:28 ` [dm-devel] " Mike Snitzer
2023-06-09 0:28 ` Mike Snitzer
2023-05-18 22:33 ` [dm-devel] [PATCH v7 5/5] loop: Add support for provision requests Sarthak Kukreti
2023-05-18 22:33 ` Sarthak Kukreti
2023-05-22 16:37 ` [dm-devel] " Darrick J. Wong
2023-05-22 16:37 ` Darrick J. Wong
2023-05-22 22:09 ` Sarthak Kukreti
2023-05-22 22:09 ` Sarthak Kukreti
2023-05-23 1:22 ` Darrick J. Wong [this message]
2023-05-23 1:22 ` Darrick J. Wong
2023-10-07 1:29 ` [dm-devel] " Sarthak Kukreti
2023-10-07 1:29 ` Sarthak Kukreti
2023-05-19 4:09 ` [dm-devel] [PATCH v7 0/5] Introduce provisioning primitives Christoph Hellwig
2023-05-19 4:09 ` Christoph Hellwig
2023-05-19 14:41 ` [dm-devel] " Mike Snitzer
2023-05-19 14:41 ` Mike Snitzer
2023-05-19 23:07 ` [dm-devel] " Dave Chinner
2023-05-19 23:07 ` Dave Chinner
2023-05-22 18:27 ` [dm-devel] " Mike Snitzer
2023-05-22 18:27 ` Mike Snitzer
2023-05-23 14:05 ` [dm-devel] " Brian Foster
2023-05-23 14:05 ` Brian Foster
2023-05-23 15:26 ` [dm-devel] " Mike Snitzer
2023-05-23 15:26 ` Mike Snitzer
2023-05-24 0:40 ` [dm-devel] " Dave Chinner
2023-05-24 0:40 ` Dave Chinner
2023-05-24 20:02 ` [dm-devel] " Mike Snitzer
2023-05-24 20:02 ` Mike Snitzer
2023-05-25 11:39 ` [dm-devel] " Dave Chinner
2023-05-25 11:39 ` Dave Chinner
2023-05-25 16:00 ` [dm-devel] " Mike Snitzer
2023-05-25 16:00 ` Mike Snitzer
2023-05-25 22:47 ` [dm-devel] " Sarthak Kukreti
2023-05-25 22:47 ` Sarthak Kukreti
2023-05-26 1:36 ` [dm-devel] " Dave Chinner
2023-05-26 1:36 ` Dave Chinner
2023-05-26 2:35 ` [dm-devel] " Sarthak Kukreti
2023-05-26 2:35 ` Sarthak Kukreti
2023-05-26 15:56 ` [dm-devel] " Brian Foster
2023-05-26 15:56 ` Brian Foster
2023-05-25 16:19 ` [dm-devel] " Brian Foster
2023-05-25 16:19 ` Brian Foster
2023-05-26 9:37 ` [dm-devel] " Dave Chinner
2023-05-26 9:37 ` Dave Chinner
2023-05-26 11:04 ` [dm-devel] " Joe Thornber
2023-05-26 23:45 ` Dave Chinner
2023-05-26 23:45 ` Dave Chinner
2023-05-30 7:27 ` [dm-devel] " Joe Thornber
2023-05-30 14:02 ` Mike Snitzer
2023-05-30 14:02 ` Mike Snitzer
2023-05-30 14:55 ` [dm-devel] " Joe Thornber
2023-05-30 15:28 ` Mike Snitzer
2023-05-30 15:28 ` Mike Snitzer
2023-06-02 18:44 ` [dm-devel] " Sarthak Kukreti
2023-06-02 18:44 ` Sarthak Kukreti
2023-06-02 21:50 ` [dm-devel] " Mike Snitzer
2023-06-02 21:50 ` Mike Snitzer
2023-06-03 0:52 ` [dm-devel] " Dave Chinner
2023-06-03 0:52 ` Dave Chinner
2023-06-03 15:57 ` [dm-devel] " Mike Snitzer
2023-06-03 15:57 ` Mike Snitzer
2023-06-05 21:14 ` [dm-devel] " Sarthak Kukreti
2023-06-05 21:14 ` Sarthak Kukreti
2023-06-07 2:15 ` [dm-devel] " Dave Chinner
2023-06-07 2:15 ` Dave Chinner
2023-06-07 23:27 ` [dm-devel] " Mike Snitzer
2023-06-07 23:27 ` Mike Snitzer
2023-06-09 20:31 ` [dm-devel] " Mike Snitzer
2023-06-09 20:31 ` Mike Snitzer
2023-06-09 21:54 ` [dm-devel] " Dave Chinner
2023-06-09 21:54 ` Dave Chinner
2023-10-07 1:30 ` [dm-devel] " Sarthak Kukreti
2023-10-07 1:30 ` Sarthak Kukreti
2023-06-07 2:01 ` [dm-devel] " Dave Chinner
2023-06-07 2:01 ` Dave Chinner
2023-06-07 23:50 ` [dm-devel] " Mike Snitzer
2023-06-07 23:50 ` Mike Snitzer
2023-06-09 3:32 ` [dm-devel] " Dave Chinner
2023-06-09 3:32 ` Dave Chinner
2023-06-08 2:03 ` [dm-devel] " Martin K. Petersen
2023-06-08 2:03 ` Martin K. Petersen
2023-06-09 0:10 ` [dm-devel] " Dave Chinner
2023-06-09 0:10 ` Dave Chinner
2023-05-26 15:47 ` [dm-devel] " Brian Foster
2023-05-26 15:47 ` Brian Foster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230523012252.GF11598@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=adilger.kernel@dilger.ca \
--cc=agk@redhat.com \
--cc=axboe@kernel.dk \
--cc=bfoster@redhat.com \
--cc=bvanassche@google.com \
--cc=dm-devel@redhat.com \
--cc=hch@infradead.org \
--cc=jasowang@redhat.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=sarthakkukreti@chromium.org \
--cc=snitzer@kernel.org \
--cc=stefanha@redhat.com \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.