summaryrefslogtreecommitdiffstats
path: root/mm/fremap.c
diff options
context:
space:
mode:
authorFred Isaman <iisaman@netapp.com>2011-02-03 18:28:50 +0000
committerTrond Myklebust <Trond.Myklebust@netapp.com>2011-03-11 15:38:39 -0500
commit38511722446993d926861696194c39ef135d85a4 (patch)
tree56ca01a34aea70cfc3473996bd3712cda3022166 /mm/fremap.c
parent53d4737580535e073963b91ce87d4216e434fab5 (diff)
downloadop-kernel-dev-38511722446993d926861696194c39ef135d85a4.zip
op-kernel-dev-38511722446993d926861696194c39ef135d85a4.tar.gz
pnfs: avoid incorrect use of layout stateid
The code could violate the following from RFC5661, section 12.5.3: "Once a client has no more layouts on a file, the layout stateid is no longer valid and MUST NOT be used." This can occur when a layout already has a lseg, starts another non-everlapping LAYOUTGET, and a CB_LAYOUTRECALL for the existing lseg is processed before we hit pnfs_layout_process(). Solve by setting, each time the client has no more lsegs for a file, a flag which blocks further use of the layout and triggers its removal. This also fixes a second bug which occurs in the same instance as above. If we actually use pnfs_layout_process, we add the new lseg to the layout, but the layout has been removed from the nfs_client list by the intervening CB_LAYOUTRECALL and will not be added back. Thus the newly acquired lseg will not be properly returned in the event of a subsequent CB_LAYOUTRECALL. Signed-off-by: Fred Isaman <iisaman@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'mm/fremap.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud