Details
-
Bug
-
Resolution: Fixed
-
Critical
-
Lustre 2.6.0
-
3
-
14780
Description
This is a regression introduced by fix of LU-4690 "lod: separate master object with master stripe" (http://review.whamcloud.com/9511 commit 60e07b972114df24105a3a1bfa7365892f72a4a7).
In lod_attr_set():
for (i = 0; i < lo->ldo_stripenr; i++) { LASSERT(lo->ldo_stripe[i]); + if (dt_object_exists(lo->ldo_stripe[i]) == 0) + continue; rc = dt_attr_set(env, lo->ldo_stripe[i], attr, handle, capa); if (rc) { CERROR("failed declaration: %d\n", rc);
Since dt_object_exists() always return false for the osp object (for OST object), any attr_set to osp object will be skipped mistakenly, and chown/chgrp won't set UID/GID to OST objects at the end.
As per Di's suggestion, we'd add additional IS_DIR checking here.
Attachments
Issue Links
Activity
Labels | Original: HB always_except | New: HB |
Resolution | New: Fixed [ 1 ] | |
Status | Original: Open [ 1 ] | New: Resolved [ 5 ] |
Link | New: This issue is related to ATP-4 [ ATP-4 ] |
Labels | New: HB always_except |
Priority | Original: Major [ 3 ] | New: Critical [ 2 ] |
Priority | Original: Critical [ 2 ] | New: Major [ 3 ] |
Fix Version/s | New: Lustre 2.6.0 [ 10595 ] |
Priority | Original: Major [ 3 ] | New: Critical [ 2 ] |
Description |
Original:
This is a regression introduced by fix of In lod_attr_set(): {code} for (i = 0; i < lo->ldo_stripenr; i++) { LASSERT(lo->ldo_stripe[i]); + if (dt_object_exists(lo->ldo_stripe[i]) == 0) + continue; rc = dt_attr_set(env, lo->ldo_stripe[i], attr, handle, capa); if (rc) { CERROR("failed declaration: %d\n", rc); {code} Since dt_object_exists() always return false for the osp object (for OST object), any attr_set to osp object will be skipped mistakenly, and chown/chgrp won't set UID/GID to OST objects at the end. As per Di's suggestion, we'd add additional IS_DIR checking here. |
New:
This is a regression introduced by fix of [ In lod_attr_set(): {code} for (i = 0; i < lo->ldo_stripenr; i++) { LASSERT(lo->ldo_stripe[i]); + if (dt_object_exists(lo->ldo_stripe[i]) == 0) + continue; rc = dt_attr_set(env, lo->ldo_stripe[i], attr, handle, capa); if (rc) { CERROR("failed declaration: %d\n", rc); {code} Since dt_object_exists() always return false for the osp object (for OST object), any attr_set to osp object will be skipped mistakenly, and chown/chgrp won't set UID/GID to OST objects at the end. As per Di's suggestion, we'd add additional IS_DIR checking here. |