|
@@ -131,20 +131,25 @@ nfs_direct_good_bytes(struct nfs_direct_req *dreq, struct nfs_pgio_header *hdr)
|
|
|
|
|
|
WARN_ON_ONCE(hdr->pgio_mirror_idx >= dreq->mirror_count);
|
|
|
|
|
|
- count = dreq->mirrors[hdr->pgio_mirror_idx].count;
|
|
|
- if (count + dreq->io_start < hdr->io_start + hdr->good_bytes) {
|
|
|
- count = hdr->io_start + hdr->good_bytes - dreq->io_start;
|
|
|
- dreq->mirrors[hdr->pgio_mirror_idx].count = count;
|
|
|
- }
|
|
|
-
|
|
|
- /* update the dreq->count by finding the minimum agreed count from all
|
|
|
- * mirrors */
|
|
|
- count = dreq->mirrors[0].count;
|
|
|
+ if (dreq->mirror_count == 1) {
|
|
|
+ dreq->mirrors[hdr->pgio_mirror_idx].count += hdr->good_bytes;
|
|
|
+ dreq->count += hdr->good_bytes;
|
|
|
+ } else {
|
|
|
+ /* mirrored writes */
|
|
|
+ count = dreq->mirrors[hdr->pgio_mirror_idx].count;
|
|
|
+ if (count + dreq->io_start < hdr->io_start + hdr->good_bytes) {
|
|
|
+ count = hdr->io_start + hdr->good_bytes - dreq->io_start;
|
|
|
+ dreq->mirrors[hdr->pgio_mirror_idx].count = count;
|
|
|
+ }
|
|
|
+ /* update the dreq->count by finding the minimum agreed count from all
|
|
|
+ * mirrors */
|
|
|
+ count = dreq->mirrors[0].count;
|
|
|
|
|
|
- for (i = 1; i < dreq->mirror_count; i++)
|
|
|
- count = min(count, dreq->mirrors[i].count);
|
|
|
+ for (i = 1; i < dreq->mirror_count; i++)
|
|
|
+ count = min(count, dreq->mirrors[i].count);
|
|
|
|
|
|
- dreq->count = count;
|
|
|
+ dreq->count = count;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|