Skip to content

Commit f6eacb2

Browse files
Christoph Hellwigaxboe
authored andcommitted
block: move read-only and supported checks into (__)blkdev_issue_zeroout
Move these checks out of the lower level helpers and into the higher level ones to prepare for refactoring. Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: Martin K. Petersen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jens Axboe <[email protected]>
1 parent ff760a8 commit f6eacb2

File tree

1 file changed

+23
-28
lines changed

1 file changed

+23
-28
lines changed

block/blk-lib.c

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -111,17 +111,12 @@ static sector_t bio_write_zeroes_limit(struct block_device *bdev)
111111
(UINT_MAX >> SECTOR_SHIFT) & ~bs_mask);
112112
}
113113

114-
static int __blkdev_issue_write_zeroes(struct block_device *bdev,
114+
static void __blkdev_issue_write_zeroes(struct block_device *bdev,
115115
sector_t sector, sector_t nr_sects, gfp_t gfp_mask,
116116
struct bio **biop, unsigned flags)
117117
{
118118
struct bio *bio = *biop;
119119

120-
if (bdev_read_only(bdev))
121-
return -EPERM;
122-
if (!bdev_write_zeroes_sectors(bdev))
123-
return -EOPNOTSUPP;
124-
125120
while (nr_sects) {
126121
unsigned int len = min_t(sector_t, nr_sects,
127122
bio_write_zeroes_limit(bdev));
@@ -138,7 +133,6 @@ static int __blkdev_issue_write_zeroes(struct block_device *bdev,
138133
}
139134

140135
*biop = bio;
141-
return 0;
142136
}
143137

144138
/*
@@ -154,17 +148,14 @@ static unsigned int __blkdev_sectors_to_bio_pages(sector_t nr_sects)
154148
return min(pages, (sector_t)BIO_MAX_VECS);
155149
}
156150

157-
static int __blkdev_issue_zero_pages(struct block_device *bdev,
151+
static void __blkdev_issue_zero_pages(struct block_device *bdev,
158152
sector_t sector, sector_t nr_sects, gfp_t gfp_mask,
159153
struct bio **biop)
160154
{
161155
struct bio *bio = *biop;
162156
int bi_size = 0;
163157
unsigned int sz;
164158

165-
if (bdev_read_only(bdev))
166-
return -EPERM;
167-
168159
while (nr_sects != 0) {
169160
bio = blk_next_bio(bio, bdev, __blkdev_sectors_to_bio_pages(nr_sects),
170161
REQ_OP_WRITE, gfp_mask);
@@ -182,7 +173,6 @@ static int __blkdev_issue_zero_pages(struct block_device *bdev,
182173
}
183174

184175
*biop = bio;
185-
return 0;
186176
}
187177

188178
/**
@@ -208,15 +198,19 @@ int __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
208198
sector_t nr_sects, gfp_t gfp_mask, struct bio **biop,
209199
unsigned flags)
210200
{
211-
int ret;
212-
213-
ret = __blkdev_issue_write_zeroes(bdev, sector, nr_sects, gfp_mask,
214-
biop, flags);
215-
if (ret != -EOPNOTSUPP || (flags & BLKDEV_ZERO_NOFALLBACK))
216-
return ret;
201+
if (bdev_read_only(bdev))
202+
return -EPERM;
217203

218-
return __blkdev_issue_zero_pages(bdev, sector, nr_sects, gfp_mask,
219-
biop);
204+
if (bdev_write_zeroes_sectors(bdev)) {
205+
__blkdev_issue_write_zeroes(bdev, sector, nr_sects,
206+
gfp_mask, biop, flags);
207+
} else {
208+
if (flags & BLKDEV_ZERO_NOFALLBACK)
209+
return -EOPNOTSUPP;
210+
__blkdev_issue_zero_pages(bdev, sector, nr_sects, gfp_mask,
211+
biop);
212+
}
213+
return 0;
220214
}
221215
EXPORT_SYMBOL(__blkdev_issue_zeroout);
222216

@@ -245,21 +239,22 @@ int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
245239
bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
246240
if ((sector | nr_sects) & bs_mask)
247241
return -EINVAL;
242+
if (bdev_read_only(bdev))
243+
return -EPERM;
244+
if ((flags & BLKDEV_ZERO_NOFALLBACK) && !try_write_zeroes)
245+
return -EOPNOTSUPP;
248246

249247
retry:
250248
bio = NULL;
251249
blk_start_plug(&plug);
252250
if (try_write_zeroes) {
253-
ret = __blkdev_issue_write_zeroes(bdev, sector, nr_sects,
254-
gfp_mask, &bio, flags);
255-
} else if (!(flags & BLKDEV_ZERO_NOFALLBACK)) {
256-
ret = __blkdev_issue_zero_pages(bdev, sector, nr_sects,
257-
gfp_mask, &bio);
251+
__blkdev_issue_write_zeroes(bdev, sector, nr_sects, gfp_mask,
252+
&bio, flags);
258253
} else {
259-
/* No zeroing offload support */
260-
ret = -EOPNOTSUPP;
254+
__blkdev_issue_zero_pages(bdev, sector, nr_sects, gfp_mask,
255+
&bio);
261256
}
262-
if (ret == 0 && bio) {
257+
if (bio) {
263258
ret = submit_bio_wait(bio);
264259
bio_put(bio);
265260
}

0 commit comments

Comments
 (0)