Commit 216e4a1d authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'nfs-for-4.13-5' of git://git.linux-nfs.org/projects/anna/linux-nfs

Pull NFS client fixes from Anna Schumaker:
 "A few more NFS client bugfixes from me for rc5.

  Dros has a stable fix for flexfiles to prevent leaking the
  nfs4_ff_ds_version arrays when freeing a layout, Trond fixed a
  potential recovery loop situation with the TEST_STATEID operation, and
  Christoph fixed up the pNFS blocklayout Kconfig options to prevent
  unsafe use with kernels that don't have large block device support.
  Summary:

  Stable fix:
   - fix leaking nfs4_ff_ds_version array

  Other fixes:
   - improve TEST_STATEID OLD_STATEID handling to prevent recovery loop

   - require 64-bit sector_t for pNFS blocklayout to prevent 32-bit
     compile errors"

* tag 'nfs-for-4.13-5' of git://git.linux-nfs.org/projects/anna/linux-nfs:
  pnfs/blocklayout: require 64-bit sector_t
  NFSv4: Ignore NFS4ERR_OLD_STATEID in nfs41_check_open_stateid()
  nfs/flexfiles: fix leak of nfs4_ff_ds_version arrays
parents e0d0e045 8a9d6e96
...@@ -121,6 +121,7 @@ config PNFS_FILE_LAYOUT ...@@ -121,6 +121,7 @@ config PNFS_FILE_LAYOUT
config PNFS_BLOCK config PNFS_BLOCK
tristate tristate
depends on NFS_V4_1 && BLK_DEV_DM depends on NFS_V4_1 && BLK_DEV_DM
depends on 64BIT || LBDAF
default NFS_V4 default NFS_V4
config PNFS_FLEXFILE_LAYOUT config PNFS_FLEXFILE_LAYOUT
......
...@@ -32,6 +32,7 @@ void nfs4_ff_layout_free_deviceid(struct nfs4_ff_layout_ds *mirror_ds) ...@@ -32,6 +32,7 @@ void nfs4_ff_layout_free_deviceid(struct nfs4_ff_layout_ds *mirror_ds)
{ {
nfs4_print_deviceid(&mirror_ds->id_node.deviceid); nfs4_print_deviceid(&mirror_ds->id_node.deviceid);
nfs4_pnfs_ds_put(mirror_ds->ds); nfs4_pnfs_ds_put(mirror_ds->ds);
kfree(mirror_ds->ds_versions);
kfree_rcu(mirror_ds, id_node.rcu); kfree_rcu(mirror_ds, id_node.rcu);
} }
......
...@@ -2553,9 +2553,8 @@ static int nfs41_check_open_stateid(struct nfs4_state *state) ...@@ -2553,9 +2553,8 @@ static int nfs41_check_open_stateid(struct nfs4_state *state)
clear_bit(NFS_O_RDWR_STATE, &state->flags); clear_bit(NFS_O_RDWR_STATE, &state->flags);
clear_bit(NFS_OPEN_STATE, &state->flags); clear_bit(NFS_OPEN_STATE, &state->flags);
stateid->type = NFS4_INVALID_STATEID_TYPE; stateid->type = NFS4_INVALID_STATEID_TYPE;
}
if (status != NFS_OK)
return status; return status;
}
if (nfs_open_stateid_recover_openmode(state)) if (nfs_open_stateid_recover_openmode(state))
return -NFS4ERR_OPENMODE; return -NFS4ERR_OPENMODE;
return NFS_OK; return NFS_OK;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment