Details
-
Bug
-
Resolution: Fixed
-
Major
-
None
-
3
-
15471
Description
The client_obd::cl_default_mds_easize field should be maintained to
reflect the largest EA size seen by the MDT. The MDC uses
cl_default_mds_easize to size request buffers appropriately to avoid
unnecessary memory reallocations. In the current code, the value is
only updated if client_obd::cl_max_mds_easize is strictly less than
mdt_body::mbo_max_mdsize. This condition is almost never met, because
client_obd::cl_max_mds_easize is computed at client mount-time based
on the number of OSTs in the filesystem, so the MDT won't ever see a
EA size larger than that.
As a result, client_obd::cl_default_mds_easize indefinitely retains
its initial value, which is computed at client mount-time based on
the filesystem's default stripe width. Any getattr() requests for
more widely striped files will consequently allocate a request buffer
that is too small, forcing reallocations on both the client and
server side. To avoid this, update client_obd::cl_default_mds_easize
independently of the value of client_obd::cl_max_mds_easize.
Attachments
Issue Links
- is related to
-
LU-3338 IOC_MDC_GETFILESTRIPE can abuse vmalloc()
- Resolved