Lines Matching refs:mirror

49 			      struct nfs4_ff_layout_mirror *mirror);
189 struct nfs4_ff_layout_mirror *mirror)
197 if (memcmp(&mirror->devid, &pos->devid, sizeof(pos->devid)) != 0)
199 if (!ff_mirror_match_fh(mirror, pos))
206 list_add(&mirror->mirrors, &ff_layout->mirrors);
207 mirror->layout = lo;
209 return mirror;
213 ff_layout_remove_mirror(struct nfs4_ff_layout_mirror *mirror)
216 if (mirror->layout == NULL)
218 inode = mirror->layout->plh_inode;
220 list_del(&mirror->mirrors);
222 mirror->layout = NULL;
227 struct nfs4_ff_layout_mirror *mirror;
229 mirror = kzalloc(sizeof(*mirror), gfp_flags);
230 if (mirror != NULL) {
231 spin_lock_init(&mirror->lock);
232 refcount_set(&mirror->ref, 1);
233 INIT_LIST_HEAD(&mirror->mirrors);
235 return mirror;
238 static void ff_layout_free_mirror(struct nfs4_ff_layout_mirror *mirror)
242 ff_layout_remove_mirror(mirror);
243 kfree(mirror->fh_versions);
244 cred = rcu_access_pointer(mirror->ro_cred);
246 cred = rcu_access_pointer(mirror->rw_cred);
248 nfs4_ff_layout_put_deviceid(mirror->mirror_ds);
249 kfree(mirror);
252 static void ff_layout_put_mirror(struct nfs4_ff_layout_mirror *mirror)
254 if (mirror != NULL && refcount_dec_and_test(&mirror->ref))
255 ff_layout_free_mirror(mirror);
414 struct nfs4_ff_layout_mirror *mirror;
514 mirror = ff_layout_add_mirror(lh, fls->mirror_array[i]);
515 if (mirror != fls->mirror_array[i]) {
518 cred = xchg(&mirror->ro_cred, cred);
521 cred = xchg(&mirror->rw_cred, cred);
525 fls->mirror_array[i] = mirror;
602 nfs4_ff_layoutstat_start_io(struct nfs4_ff_layout_mirror *mirror,
607 struct nfs4_flexfile_layout *ffl = FF_LAYOUT_FROM_HDR(mirror->layout);
610 if (!mirror->start_time)
611 mirror->start_time = now;
612 if (mirror->report_interval != 0)
613 report_interval = (s64)mirror->report_interval * 1000LL;
660 struct nfs4_ff_layout_mirror *mirror,
665 spin_lock(&mirror->lock);
666 report = nfs4_ff_layoutstat_start_io(mirror, &mirror->read_stat, now);
667 nfs4_ff_layout_stat_io_update_requested(&mirror->read_stat, requested);
668 set_bit(NFS4_FF_MIRROR_STAT_AVAIL, &mirror->flags);
669 spin_unlock(&mirror->lock);
677 struct nfs4_ff_layout_mirror *mirror,
681 spin_lock(&mirror->lock);
682 nfs4_ff_layout_stat_io_update_completed(&mirror->read_stat,
685 set_bit(NFS4_FF_MIRROR_STAT_AVAIL, &mirror->flags);
686 spin_unlock(&mirror->lock);
691 struct nfs4_ff_layout_mirror *mirror,
696 spin_lock(&mirror->lock);
697 report = nfs4_ff_layoutstat_start_io(mirror , &mirror->write_stat, now);
698 nfs4_ff_layout_stat_io_update_requested(&mirror->write_stat, requested);
699 set_bit(NFS4_FF_MIRROR_STAT_AVAIL, &mirror->flags);
700 spin_unlock(&mirror->lock);
708 struct nfs4_ff_layout_mirror *mirror,
716 spin_lock(&mirror->lock);
717 nfs4_ff_layout_stat_io_update_completed(&mirror->write_stat,
719 set_bit(NFS4_FF_MIRROR_STAT_AVAIL, &mirror->flags);
720 spin_unlock(&mirror->lock);
747 struct nfs4_ff_layout_mirror *mirror;
753 mirror = FF_LAYOUT_COMP(lseg, idx);
754 ds = nfs4_ff_layout_prepare_ds(lseg, mirror, false);
759 nfs4_test_deviceid_unavailable(&mirror->mirror_ds->id_node))
838 struct nfs4_ff_layout_mirror *mirror;
866 mirror = FF_LAYOUT_COMP(pgio->pg_lseg, ds_idx);
868 pgm->pg_bsize = mirror->mirror_ds->ds_versions[0].rsize;
892 struct nfs4_ff_layout_mirror *mirror;
919 mirror = FF_LAYOUT_COMP(pgio->pg_lseg, i);
920 ds = nfs4_ff_layout_prepare_ds(pgio->pg_lseg, mirror, true);
930 pgm->pg_bsize = mirror->mirror_ds->ds_versions[0].wsize;
1228 struct nfs4_ff_layout_mirror *mirror;
1260 mirror = FF_LAYOUT_COMP(lseg, idx);
1262 mirror, offset, length, status, opnum,
1767 struct nfs4_ff_layout_mirror *mirror;
1778 mirror = FF_LAYOUT_COMP(lseg, idx);
1779 ds = nfs4_ff_layout_prepare_ds(lseg, mirror, false);
1783 ds_clnt = nfs4_ff_find_or_create_ds_client(mirror, ds->ds_clp,
1788 ds_cred = ff_layout_get_ds_cred(mirror, &lseg->pls_range, hdr->cred);
1792 vers = nfs4_ff_layout_ds_version(mirror);
1800 fh = nfs4_ff_layout_select_ds_fh(mirror);
1804 nfs4_ff_layout_select_ds_stateid(mirror, &hdr->args.stateid);
1837 struct nfs4_ff_layout_mirror *mirror;
1844 mirror = FF_LAYOUT_COMP(lseg, idx);
1845 ds = nfs4_ff_layout_prepare_ds(lseg, mirror, true);
1849 ds_clnt = nfs4_ff_find_or_create_ds_client(mirror, ds->ds_clp,
1854 ds_cred = ff_layout_get_ds_cred(mirror, &lseg->pls_range, hdr->cred);
1858 vers = nfs4_ff_layout_ds_version(mirror);
1869 fh = nfs4_ff_layout_select_ds_fh(mirror);
1873 nfs4_ff_layout_select_ds_stateid(mirror, &hdr->args.stateid);
1919 struct nfs4_ff_layout_mirror *mirror;
1930 mirror = FF_LAYOUT_COMP(lseg, idx);
1931 ds = nfs4_ff_layout_prepare_ds(lseg, mirror, true);
1935 ds_clnt = nfs4_ff_find_or_create_ds_client(mirror, ds->ds_clp,
1940 ds_cred = ff_layout_get_ds_cred(mirror, &lseg->pls_range, data->cred);
1944 vers = nfs4_ff_layout_ds_version(mirror);
2009 struct nfs4_ff_layout_mirror *mirror;
2017 mirror = flseg->mirror_array[idx];
2018 mirror_ds = mirror->mirror_ds;
2021 ds = mirror->mirror_ds->ds;
2425 struct nfs4_ff_layout_mirror *mirror)
2428 struct nfs4_pnfs_ds *ds = mirror->mirror_ds->ds;
2429 struct nfs_fh *fh = &mirror->fh_versions[0];
2441 spin_lock(&mirror->lock);
2442 ff_layout_encode_io_latency(xdr, &mirror->read_stat.io_stat);
2444 ff_layout_encode_io_latency(xdr, &mirror->write_stat.io_stat);
2445 spin_unlock(&mirror->lock);
2447 ff_layout_encode_nfstime(xdr, ktime_sub(ktime_get(), mirror->start_time));
2471 struct nfs4_ff_layout_mirror *mirror = opaque->data;
2473 ff_layout_put_mirror(mirror);
2487 struct nfs4_ff_layout_mirror *mirror;
2491 list_for_each_entry(mirror, &ff_layout->mirrors, mirrors) {
2494 if (IS_ERR_OR_NULL(mirror->mirror_ds))
2497 &mirror->flags) &&
2500 /* mirror refcount put in cleanup_layoutstats */
2501 if (!refcount_inc_not_zero(&mirror->ref))
2503 dev = &mirror->mirror_ds->id_node;
2507 spin_lock(&mirror->lock);
2508 devinfo->read_count = mirror->read_stat.io_stat.ops_completed;
2509 devinfo->read_bytes = mirror->read_stat.io_stat.bytes_completed;
2510 devinfo->write_count = mirror->write_stat.io_stat.ops_completed;
2511 devinfo->write_bytes = mirror->write_stat.io_stat.bytes_completed;
2512 spin_unlock(&mirror->lock);
2515 devinfo->ld_private.data = mirror;