diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c
index 9b9ea0f3c4169424f9ab100574a80be3c1bba1af..18769d906ca91f6228deb5771e928a952e936a0f 100644
--- a/drivers/firewire/fw-ohci.c
+++ b/drivers/firewire/fw-ohci.c
@@ -1621,15 +1621,15 @@ ohci_queue_iso_receive_dualbuffer(struct fw_iso_context *base,
 		page_bus = page_private(buffer->pages[page]);
 		db->second_buffer = cpu_to_le32(page_bus + offset);
 
+		if (p->interrupt && length == rest)
+			db->control |= cpu_to_le16(descriptor_irq_always);
+
 		context_append(&ctx->context, d, z, header_z);
 		offset = (offset + length) & ~PAGE_MASK;
 		rest -= length;
 		page++;
 	}
 
-	if (p->interrupt)
-		db->control |= cpu_to_le16(descriptor_irq_always);
-
 	return 0;
 }
  
@@ -1668,6 +1668,9 @@ ohci_queue_iso_receive_bufferfill(struct fw_iso_context *base,
 		d->req_count = cpu_to_le16(length);
 		d->res_count = cpu_to_le16(length);
 
+		if (packet->interrupt && length == rest)
+			d->control |= cpu_to_le16(descriptor_irq_always);
+
 		context_append(&ctx->context, d, 1, 0);
 
 		offset = (offset + length) & ~PAGE_MASK;
@@ -1675,9 +1678,6 @@ ohci_queue_iso_receive_bufferfill(struct fw_iso_context *base,
 		page++;
 	}
 
-	if (packet->interrupt)
-		d->control |= cpu_to_le16(descriptor_irq_always);
-
 	return 0;
 }