在未分区的块设备上使用时,blk_get_request崩溃

时间:2019-07-10 10:44:05

标签: c linux linux-kernel linux-device-driver

 def get_queryset(self):
    """Get queryset for loan list."""
    approved_loans = self.model.objects.order_by('-date_disbursed').filter(
        Q(status=Loan.LOAN_STATUS_PENDING)
        | Q(status=Loan.LOAN_STATUS_ON_LOAN)
        | Q(status=Loan.LOAN_STATUS_CLOSED)
        | Q(status=Loan.LOAN_STATUS_WRITTEN_OFF)
        | Q(status=Loan.LOAN_STATUS_RESCHEDULED)
    )

    loan_performances = LoanPerformance.objects.order_by('loan__id', '-date_created').distinct('loan__id')
    for loan in approved_loans:
        loan_performance = loan_performances.filter(loan=loan).first()
        if loan_performance and loan_performance.interest_due_today and loan_performance.principal_due_today:
            loan.amount_due = loan_performance.interest_due_today + loan_performance.principal_due_today
    return approved_loans

def get_context_data(self, **kwargs):
    """Get loan list context."""
    context = super(LoanListView, self).get_context_data(**kwargs)
    loan_manager = LoanManager(self.get_object().id)
    context['page_name'] = 'loan_list'
    context['summary'] = {
        'end_date': loan_manager.get_repayment_end_date(),
    }
    # data uploaded from sheets is stored in session immediately after
    context['uploaded_data'] = self.request.session.get('uploaded_data')
    if context['uploaded_data']:
        del self.request.session['uploaded_data']
    return context

def get_object(self, queryset=None):
    """Get loan detail object."""
    return self.model.objects.all()

当我在/ dev / sdc上有分区时,上面的代码工作正常,但是当该分区不存在时崩溃。

奇怪的是,如果我删除分区,此代码将正常运行而不会崩溃。直到我重启机器。

struct block_device *bdev = lookup_bdev("/dev/sdc");
struct request_queue *rq = bdev_get_queue(bdev);
req = blk_get_request(rq, READ, __GFP_RECLAIM);

0 个答案:

没有答案