Chuck Lever <cel@xxxxxxxxxxxxxx> wrote:Andrew Morton wrote:Chuck Lever <cel@xxxxxxxxxx> wrote:Yes. At the top of the loop, there is no outstanding I/O, so no locking is needed while updating "outstanding." Inside the loop, we've dispatched some I/O against "dreq" so locking is needed to ensure outstanding is updated properly.+ * Prevent I/O completion while we're still reschedulingNo locking.
+ */
+ dreq->outstanding++;
+
dreq->count = 0;Locking.
+ list_for_each(pos, &dreq->rewrite_list) {
+ struct nfs_write_data *data =
+ list_entry(dreq->rewrite_list.next, struct nfs_write_data, pages);
+
+ spin_lock(&dreq->lock);
+ dreq->outstanding++;
+ spin_unlock(&dreq->lock);
Deliberate?
OK. Well if I asked, then others will wonder about it. A comment would
cure that problem ;)