diff options
author | Benny Halevy <bhalevy@panasas.com> | 2011-05-19 22:14:47 -0400 |
---|---|---|
committer | Boaz Harrosh <bharrosh@panasas.com> | 2011-05-29 05:09:48 -0400 |
commit | a1eaecbc4c8307e27772d6584ef85a2e93250661 (patch) | |
tree | 940549d45db98a5bcfe22501de0bbe9c96de4c8e /fs/nfs/nfs4filelayout.c | |
parent | 45df3c8b0f3a58facb125d7631890426706c0bfa (diff) |
NFSv4.1: make deviceid cache global
Move deviceid cache from the pnfs files layout driver to the
generic layer in preparation for the objects layout driver.
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Diffstat (limited to 'fs/nfs/nfs4filelayout.c')
-rw-r--r-- | fs/nfs/nfs4filelayout.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c index 571c1b032e9d..4c67a6f6519d 100644 --- a/fs/nfs/nfs4filelayout.c +++ b/fs/nfs/nfs4filelayout.c | |||
@@ -421,6 +421,7 @@ filelayout_check_layout(struct pnfs_layout_hdr *lo, | |||
421 | struct nfs4_deviceid *id, | 421 | struct nfs4_deviceid *id, |
422 | gfp_t gfp_flags) | 422 | gfp_t gfp_flags) |
423 | { | 423 | { |
424 | struct nfs4_deviceid_node *d; | ||
424 | struct nfs4_file_layout_dsaddr *dsaddr; | 425 | struct nfs4_file_layout_dsaddr *dsaddr; |
425 | int status = -EINVAL; | 426 | int status = -EINVAL; |
426 | struct nfs_server *nfss = NFS_SERVER(lo->plh_inode); | 427 | struct nfs_server *nfss = NFS_SERVER(lo->plh_inode); |
@@ -440,12 +441,13 @@ filelayout_check_layout(struct pnfs_layout_hdr *lo, | |||
440 | } | 441 | } |
441 | 442 | ||
442 | /* find and reference the deviceid */ | 443 | /* find and reference the deviceid */ |
443 | dsaddr = nfs4_fl_find_get_deviceid(NFS_SERVER(lo->plh_inode)->nfs_client, id); | 444 | d = nfs4_find_get_deviceid(NFS_SERVER(lo->plh_inode)->nfs_client, id); |
444 | if (dsaddr == NULL) { | 445 | if (d == NULL) { |
445 | dsaddr = get_device_info(lo->plh_inode, id, gfp_flags); | 446 | dsaddr = get_device_info(lo->plh_inode, id, gfp_flags); |
446 | if (dsaddr == NULL) | 447 | if (dsaddr == NULL) |
447 | goto out; | 448 | goto out; |
448 | } | 449 | } else |
450 | dsaddr = container_of(d, struct nfs4_file_layout_dsaddr, id_node); | ||
449 | fl->dsaddr = dsaddr; | 451 | fl->dsaddr = dsaddr; |
450 | 452 | ||
451 | if (fl->first_stripe_index < 0 || | 453 | if (fl->first_stripe_index < 0 || |
@@ -535,7 +537,7 @@ filelayout_decode_layout(struct pnfs_layout_hdr *flo, | |||
535 | 537 | ||
536 | memcpy(id, p, sizeof(*id)); | 538 | memcpy(id, p, sizeof(*id)); |
537 | p += XDR_QUADLEN(NFS4_DEVICEID4_SIZE); | 539 | p += XDR_QUADLEN(NFS4_DEVICEID4_SIZE); |
538 | print_deviceid(id); | 540 | nfs4_print_deviceid(id); |
539 | 541 | ||
540 | nfl_util = be32_to_cpup(p++); | 542 | nfl_util = be32_to_cpup(p++); |
541 | if (nfl_util & NFL4_UFLG_COMMIT_THRU_MDS) | 543 | if (nfl_util & NFL4_UFLG_COMMIT_THRU_MDS) |