Re: [PATCH V8 08/11] block: add blk_end_flush_machinery

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 24, 2020 at 12:41:36PM +0200, Christoph Hellwig wrote:
> On Fri, Apr 24, 2020 at 06:23:48PM +0800, Ming Lei wrote:
> > +/* complete requests which just requires one flush command */
> > +static void blk_complete_flush_requests(struct blk_flush_queue *fq,
> > +		struct list_head *flush_list)
> > +{
> > +	struct block_device *bdev;
> > +	struct request *rq;
> > +	int error = -ENXIO;
> > +
> > +	if (list_empty(flush_list))
> > +		return;
> > +
> > +	rq = list_first_entry(flush_list, struct request, queuelist);
> > +
> > +	/* Send flush via one active hctx so we can move on */
> > +	bdev = bdget_disk(rq->rq_disk, 0);
> > +	if (bdev) {
> > +		error = blkdev_issue_flush(bdev, GFP_KERNEL, NULL);
> > +		bdput(bdev);
> > +	}
> 
> FYI, we don't really need the bdev to send a bio anymore, this could just
> do:
> 
> 	bio = bio_alloc(GFP_KERNEL, 0); // XXX: shouldn't this be GFP_NOIO??

Error handling.

> 	bio->bi_disk = rq->rq_disk;
> 	bio->bi_partno = 0;
> 	bio_associate_blkg(bio); // XXX: actually, shouldn't this come from rq?
> 	bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;
> 	error = submit_bio_wait(bio);
> 	bio_put(bio);

Yeah, that is another way, however I prefer to blkdev_issue_flush
because it takes less code and we do have the API of blkdev_issue_flush.


Thanks,
Ming




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux