This is to remove an obsoleted code where it causes drastic
performance degradation. This code is written before PERM lock
is introduced, and it requests UPDATE lock at path walk for
remote directory, which will be cancelled at later file creation.
Tests result before and after this patch is applied:
Test case:
rm -rf /mnt/lustre_purple/testdir
lfs mkdir -i 0 /mnt/lustre_purple/testdir
lfs mkdir -i 2 /mnt/lustre_purple/testdir/dir2
./lustre-release/lustre/tests/createmany -o \
/mnt/lustre_purple/testdir/dir2/f 10000
Before the patch is applied:
total: 10000 open/close in 12.82 seconds: 780.22 ops/second
After the patch is applied:
total: 10000 open/close in 4.89 seconds: 2044.75 ops/second
Signed-off-by: Jinshan Xiong <jinshan.xiong@gmail.com>
Change-Id: Ib474dc28d6edc7d15801b6821edc0e1d108bb4b6
Reviewed-on: https://review.whamcloud.com/34291
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Andrew Perepechko <c17827@cray.com>
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
LASSERT((body->mbo_valid & OBD_MD_MDS));
/*
LASSERT((body->mbo_valid & OBD_MD_MDS));
/*
- * Unfortunately, we have to lie to MDC/MDS to retrieve
- * attributes llite needs and provideproper locking.
- */
- if (it->it_op & IT_LOOKUP)
- it->it_op = IT_GETATTR;
-
- /*
* We got LOOKUP lock, but we really need attrs.
*/
pmode = it->it_lock_mode;
* We got LOOKUP lock, but we really need attrs.
*/
pmode = it->it_lock_mode;
mdt_lock_reg_init(lhc, LCK_PR);
/*
mdt_lock_reg_init(lhc, LCK_PR);
/*
- * Object's name is on another MDS, no lookup or layout
- * lock is needed here but update lock is.
+ * Object's name entry is on another MDS, it will
+ * request PERM lock only because LOOKUP lock is owned
+ * by the MDS where name entry resides.
+ *
+ * TODO: it should try layout lock too. - Jinshan
*/
child_bits &= ~(MDS_INODELOCK_LOOKUP |
MDS_INODELOCK_LAYOUT);
*/
child_bits &= ~(MDS_INODELOCK_LOOKUP |
MDS_INODELOCK_LAYOUT);
- child_bits |= MDS_INODELOCK_PERM | MDS_INODELOCK_UPDATE;
+ child_bits |= MDS_INODELOCK_PERM;
rc = mdt_object_lock(info, child, lhc, child_bits);
if (rc < 0)
rc = mdt_object_lock(info, child, lhc, child_bits);
if (rc < 0)