View | Details | Raw Unified | Return to bug 125139
Collapse All | Expand All

(-)sys/dev/ata/atapi-cd.c (-3 / +15 lines)
Lines 246-256 acd_geom_ioctl(struct g_provider *pp, u_ Link Here
246
	break;
246
	break;
247
247
248
    case CDIOCALLOW:
248
    case CDIOCALLOW:
249
	if (cdp->gnp != 1 || pp->acr != 1) {
250
	    error = EBUSY;
251
	    break;
252
	}
249
	error = acd_prevent_allow(dev, 0);
253
	error = acd_prevent_allow(dev, 0);
250
	cdp->flags &= ~F_LOCKED;
254
	cdp->flags &= ~F_LOCKED;
251
	break;
255
	break;
252
256
253
    case CDIOCPREVENT:
257
    case CDIOCPREVENT:
258
	if (cdp->gnp != 1 || pp->acr != 1) {
259
	    error = EBUSY;
260
	    break;
261
	}
254
	error = acd_prevent_allow(dev, 1);
262
	error = acd_prevent_allow(dev, 1);
255
	cdp->flags |= F_LOCKED;
263
	cdp->flags |= F_LOCKED;
256
	break;
264
	break;
Lines 266-272 acd_geom_ioctl(struct g_provider *pp, u_ Link Here
266
	break;
274
	break;
267
275
268
    case CDIOCEJECT:
276
    case CDIOCEJECT:
269
	if (pp->acr != 1) {
277
	if (cdp->gnp != 1 || pp->acr != 1) {
270
	    error = EBUSY;
278
	    error = EBUSY;
271
	    break;
279
	    break;
272
	}
280
	}
Lines 274-280 acd_geom_ioctl(struct g_provider *pp, u_ Link Here
274
	break;
282
	break;
275
283
276
    case CDIOCCLOSE:
284
    case CDIOCCLOSE:
277
	if (pp->acr != 1)
285
	if (cdp->gnp != 1 || pp->acr != 1)
278
	    break;
286
	    break;
279
	error = acd_tray(dev, 1);
287
	error = acd_tray(dev, 1);
280
	break;
288
	break;
Lines 713-724 acd_geom_access(struct g_provider *pp, i Link Here
713
    ata_free_request(request);
721
    ata_free_request(request);
714
722
715
    if (pp->acr == 0) {
723
    if (pp->acr == 0) {
724
	cdp->gnp++;
716
	acd_prevent_allow(dev, 1);
725
	acd_prevent_allow(dev, 1);
717
	cdp->flags |= F_LOCKED;
726
	cdp->flags |= F_LOCKED;
718
	acd_read_toc(dev);
727
	acd_read_toc(dev);
719
    }
728
    }
720
729
721
    if (dr + pp->acr == 0) {
730
    if (dr + pp->acr == 0)
731
	cdp->gnp--;
732
733
    if (cdp->gnp == 0) {
722
	acd_prevent_allow(dev, 0);
734
	acd_prevent_allow(dev, 0);
723
	cdp->flags &= ~F_LOCKED;
735
	cdp->flags &= ~F_LOCKED;
724
    }
736
    }
(-)sys/dev/ata/atapi-cd.h (+2 lines)
Lines 312-315 struct acd_softc { Link Here
312
    u_int32_t                   iomax;          /* Max I/O request (bytes) */
312
    u_int32_t                   iomax;          /* Max I/O request (bytes) */
313
    struct g_geom               *gp;            /* geom instance */
313
    struct g_geom               *gp;            /* geom instance */
314
    struct g_provider           *pp[MAXTRK+1];  /* providers */
314
    struct g_provider           *pp[MAXTRK+1];  /* providers */
315
    u_int                       gnp;            /* number of geom providers
316
                                                   attached to the device */
315
};
317
};

Return to bug 125139