Lines Matching refs:mirror
43 struct nfs4_ff_layout_mirror *mirror);
183 struct nfs4_ff_layout_mirror *mirror)
191 if (memcmp(&mirror->devid, &pos->devid, sizeof(pos->devid)) != 0)
193 if (!ff_mirror_match_fh(mirror, pos))
200 list_add(&mirror->mirrors, &ff_layout->mirrors);
201 mirror->layout = lo;
203 return mirror;
207 ff_layout_remove_mirror(struct nfs4_ff_layout_mirror *mirror)
210 if (mirror->layout == NULL)
212 inode = mirror->layout->plh_inode;
214 list_del(&mirror->mirrors);
216 mirror->layout = NULL;
221 struct nfs4_ff_layout_mirror *mirror;
223 mirror = kzalloc(sizeof(*mirror), gfp_flags);
224 if (mirror != NULL) {
225 spin_lock_init(&mirror->lock);
226 refcount_set(&mirror->ref, 1);
227 INIT_LIST_HEAD(&mirror->mirrors);
229 return mirror;
232 static void ff_layout_free_mirror(struct nfs4_ff_layout_mirror *mirror)
236 ff_layout_remove_mirror(mirror);
237 kfree(mirror->fh_versions);
238 cred = rcu_access_pointer(mirror->ro_cred);
240 cred = rcu_access_pointer(mirror->rw_cred);
242 nfs4_ff_layout_put_deviceid(mirror->mirror_ds);
243 kfree(mirror);
246 static void ff_layout_put_mirror(struct nfs4_ff_layout_mirror *mirror)
248 if (mirror != NULL && refcount_dec_and_test(&mirror->ref))
249 ff_layout_free_mirror(mirror);
408 struct nfs4_ff_layout_mirror *mirror;
508 mirror = ff_layout_add_mirror(lh, fls->mirror_array[i]);
509 if (mirror != fls->mirror_array[i]) {
512 cred = xchg(&mirror->ro_cred, cred);
515 cred = xchg(&mirror->rw_cred, cred);
519 fls->mirror_array[i] = mirror;
596 nfs4_ff_layoutstat_start_io(struct nfs4_ff_layout_mirror *mirror,
601 struct nfs4_flexfile_layout *ffl = FF_LAYOUT_FROM_HDR(mirror->layout);
604 if (!mirror->start_time)
605 mirror->start_time = now;
606 if (mirror->report_interval != 0)
607 report_interval = (s64)mirror->report_interval * 1000LL;
654 struct nfs4_ff_layout_mirror *mirror,
659 spin_lock(&mirror->lock);
660 report = nfs4_ff_layoutstat_start_io(mirror, &mirror->read_stat, now);
661 nfs4_ff_layout_stat_io_update_requested(&mirror->read_stat, requested);
662 set_bit(NFS4_FF_MIRROR_STAT_AVAIL, &mirror->flags);
663 spin_unlock(&mirror->lock);
671 struct nfs4_ff_layout_mirror *mirror,
675 spin_lock(&mirror->lock);
676 nfs4_ff_layout_stat_io_update_completed(&mirror->read_stat,
679 set_bit(NFS4_FF_MIRROR_STAT_AVAIL, &mirror->flags);
680 spin_unlock(&mirror->lock);
685 struct nfs4_ff_layout_mirror *mirror,
690 spin_lock(&mirror->lock);
691 report = nfs4_ff_layoutstat_start_io(mirror , &mirror->write_stat, now);
692 nfs4_ff_layout_stat_io_update_requested(&mirror->write_stat, requested);
693 set_bit(NFS4_FF_MIRROR_STAT_AVAIL, &mirror->flags);
694 spin_unlock(&mirror->lock);
702 struct nfs4_ff_layout_mirror *mirror,
710 spin_lock(&mirror->lock);
711 nfs4_ff_layout_stat_io_update_completed(&mirror->write_stat,
713 set_bit(NFS4_FF_MIRROR_STAT_AVAIL, &mirror->flags);
714 spin_unlock(&mirror->lock);
741 struct nfs4_ff_layout_mirror *mirror;
751 mirror = FF_LAYOUT_COMP(lseg, idx);
752 ds = nfs4_ff_layout_prepare_ds(lseg, mirror, fail_return);
757 nfs4_test_deviceid_unavailable(&mirror->mirror_ds->id_node))
839 struct nfs4_ff_layout_mirror *mirror;
867 mirror = FF_LAYOUT_COMP(pgio->pg_lseg, ds_idx);
869 pgm->pg_bsize = mirror->mirror_ds->ds_versions[0].rsize;
893 struct nfs4_ff_layout_mirror *mirror;
923 mirror = FF_LAYOUT_COMP(pgio->pg_lseg, i);
924 ds = nfs4_ff_layout_prepare_ds(pgio->pg_lseg, mirror, true);
934 pgm->pg_bsize = mirror->mirror_ds->ds_versions[0].wsize;
1233 struct nfs4_ff_layout_mirror *mirror;
1263 mirror = FF_LAYOUT_COMP(lseg, idx);
1265 mirror, offset, length, status, opnum,
1754 struct nfs4_ff_layout_mirror *mirror;
1765 mirror = FF_LAYOUT_COMP(lseg, idx);
1766 ds = nfs4_ff_layout_prepare_ds(lseg, mirror, false);
1770 ds_clnt = nfs4_ff_find_or_create_ds_client(mirror, ds->ds_clp,
1775 ds_cred = ff_layout_get_ds_cred(mirror, &lseg->pls_range, hdr->cred);
1779 vers = nfs4_ff_layout_ds_version(mirror);
1787 fh = nfs4_ff_layout_select_ds_fh(mirror);
1791 nfs4_ff_layout_select_ds_stateid(mirror, &hdr->args.stateid);
1824 struct nfs4_ff_layout_mirror *mirror;
1831 mirror = FF_LAYOUT_COMP(lseg, idx);
1832 ds = nfs4_ff_layout_prepare_ds(lseg, mirror, true);
1836 ds_clnt = nfs4_ff_find_or_create_ds_client(mirror, ds->ds_clp,
1841 ds_cred = ff_layout_get_ds_cred(mirror, &lseg->pls_range, hdr->cred);
1845 vers = nfs4_ff_layout_ds_version(mirror);
1856 fh = nfs4_ff_layout_select_ds_fh(mirror);
1860 nfs4_ff_layout_select_ds_stateid(mirror, &hdr->args.stateid);
1906 struct nfs4_ff_layout_mirror *mirror;
1917 mirror = FF_LAYOUT_COMP(lseg, idx);
1918 ds = nfs4_ff_layout_prepare_ds(lseg, mirror, true);
1922 ds_clnt = nfs4_ff_find_or_create_ds_client(mirror, ds->ds_clp,
1927 ds_cred = ff_layout_get_ds_cred(mirror, &lseg->pls_range, data->cred);
1931 vers = nfs4_ff_layout_ds_version(mirror);
2356 struct nfs4_ff_layout_mirror *mirror)
2359 struct nfs4_pnfs_ds *ds = mirror->mirror_ds->ds;
2360 struct nfs_fh *fh = &mirror->fh_versions[0];
2372 spin_lock(&mirror->lock);
2373 ff_layout_encode_io_latency(xdr, &mirror->read_stat.io_stat);
2375 ff_layout_encode_io_latency(xdr, &mirror->write_stat.io_stat);
2376 spin_unlock(&mirror->lock);
2378 ff_layout_encode_nfstime(xdr, ktime_sub(ktime_get(), mirror->start_time));
2402 struct nfs4_ff_layout_mirror *mirror = opaque->data;
2404 ff_layout_put_mirror(mirror);
2418 struct nfs4_ff_layout_mirror *mirror;
2422 list_for_each_entry(mirror, &ff_layout->mirrors, mirrors) {
2425 if (IS_ERR_OR_NULL(mirror->mirror_ds))
2427 if (!test_and_clear_bit(NFS4_FF_MIRROR_STAT_AVAIL, &mirror->flags))
2429 /* mirror refcount put in cleanup_layoutstats */
2430 if (!refcount_inc_not_zero(&mirror->ref))
2432 dev = &mirror->mirror_ds->id_node;
2436 spin_lock(&mirror->lock);
2437 devinfo->read_count = mirror->read_stat.io_stat.ops_completed;
2438 devinfo->read_bytes = mirror->read_stat.io_stat.bytes_completed;
2439 devinfo->write_count = mirror->write_stat.io_stat.ops_completed;
2440 devinfo->write_bytes = mirror->write_stat.io_stat.bytes_completed;
2441 spin_unlock(&mirror->lock);
2444 devinfo->ld_private.data = mirror;