already pending requests. Do same for blkback.
* NOTIFICATION FROM GUEST OS.
*/
-static void blkif_notify_work(blkif_t *blkif)
+void blkif_notify_work(blkif_t *blkif)
{
blkif->waiting_reqs = 1;
wake_up(&blkif->wq);
irqreturn_t blkif_be_int(int irq, void *dev_id, struct pt_regs *regs);
int blkif_schedule(void *arg);
+void blkif_notify_work(blkif_t *blkif);
+
int blkback_barrier(struct xenbus_transaction xbt,
struct backend_info *be, int state);
/* Ensure we connect even when two watches fire in
close successsion and we miss the intermediate value
of frontend_state. */
+ if (dev->state != XenbusStateConnected) {
+ err = connect_ring(be);
+ if (err)
+ break;
+ update_blkif_status(be->blkif);
+ }
+
if (dev->state == XenbusStateConnected)
- break;
+ blkif_notify_work(be->blkif);
- err = connect_ring(be);
- if (err)
- break;
- update_blkif_status(be->blkif);
break;
case XenbusStateClosing:
* NOTIFICATION FROM GUEST OS.
*/
-static void blkif_notify_work(blkif_t *blkif)
+void tap_blkif_notify_work(blkif_t *blkif)
{
blkif->waiting_reqs = 1;
wake_up(&blkif->wq);
irqreturn_t tap_blkif_be_int(int irq, void *dev_id, struct pt_regs *regs)
{
- blkif_notify_work(dev_id);
+ tap_blkif_notify_work(dev_id);
return IRQ_HANDLED;
}
spin_unlock_irqrestore(&blkif->blk_ring_lock, flags);
if (more_to_do)
- blkif_notify_work(blkif);
+ tap_blkif_notify_work(blkif);
if (notify)
notify_remote_via_irq(blkif->irq);
}
blkif_t *blkif);
void signal_tapdisk(int idx);
+void tap_blkif_notify_work(blkif_t *blkif);
+
#endif /* __BLKIF__BACKEND__COMMON_H__ */
/* Ensure we connect even when two watches fire in
close successsion and we miss the intermediate value
of frontend_state. */
+ if (dev->state != XenbusStateConnected) {
+ err = connect_ring(be);
+ if (err)
+ break;
+ tap_update_blkif_status(be->blkif);
+ }
+
if (dev->state == XenbusStateConnected)
- break;
+ tap_blkif_notify_work(be->blkif);
- err = connect_ring(be);
- if (err)
- break;
- tap_update_blkif_status(be->blkif);
break;
case XenbusStateClosing: