[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [dm-devel] scsi: address leak in the error path of discard page allocation
- From: Christoph Hellwig <hch lst de>
- To: FUJITA Tomonori <fujita tomonori lab ntt co jp>
- Cc: axboe kernel dk, linux-scsi vger kernel org, snitzer redhat com, linux-kernel vger kernel org, dm-devel redhat com, James Bottomley suse de, hch lst de
- Subject: Re: [dm-devel] scsi: address leak in the error path of discard page allocation
- Date: Fri, 2 Jul 2010 12:52:41 +0200
On Fri, Jul 02, 2010 at 01:53:14PM +0900, FUJITA Tomonori wrote:
> Seems that scsi-ml calls scsi_unprep_request() for not-prepped
> requests in scsi_init_io error path. So we could move that
> scsi_unprep_request() to the error path in scsi_prep_return(). Then we
> can free discard page in the single place.
>
> Applying the rule strictly is fine by me too; we remove
> scsi_unprep_request() in scsi_init_io error path and clean up things
> in each prep function's error path.
That would be my preference. Making sure a function cleans up all
allocations / state changes on errors means code is a lot fragile and
easier to understand.
> Btw, blk_clear_request_payload() is necessary?
>
> Making sure that a request is clean is not a bad idea but if we hit
> BLKPREP_KILL or BLKPREP_DEFER, we call
> blk_end_request(). blk_end_request() can free a request properly even
> if we don't do something like blk_clear_request_payload?
For BLKPREP_KILL we do call __blk_end_request_all, but for
BLKPREP_DEFER we don't. In that case we just leave it on the queue for
a later retry. So we either have to clean it up, or leave the detect
the case of a partially constructed command in ->prep_fn. I think
cleaning up properly and having defined state when entering ->prep_fn is
the better variant.
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]