- ext3-inode-reuse is part of vanilla-2.4.24 series
- MDS doesn't take lock to prevent inode recreation
(this improves performance a bit)
procfs-ndynamic-2.4.patch
ext3-truncate-buffer-head.patch
inode-max-readahead-2.4.24.patch
procfs-ndynamic-2.4.patch
ext3-truncate-buffer-head.patch
inode-max-readahead-2.4.24.patch
-dynamic-locks-2.4.24.patch
-vfs-pdirops-2.4.20-rh.patch
-ext3-pdirops-2.4.24-chaos.patch
-ext3-mds-num-2.4.24.patch
+dynamic-locks-2.4.24.patch
+vfs-pdirops-2.4.20-rh.patch
+ext3-pdirops-2.4.24-chaos.patch
+ext3-mds-num-2.4.24.patch
export_lookup_create.patch
ext3-raw-lookup-pdirops.patch
kksymoops-2.4.24.vanilla.patch
export_lookup_create.patch
ext3-raw-lookup-pdirops.patch
kksymoops-2.4.24.vanilla.patch
+ext3-inode-reuse-2.4.20.patch
err);
}
} else if (created) {
err);
}
} else if (created) {
mds_lock_new_child(obd, dchild->d_inode, NULL);
mds_lock_new_child(obd, dchild->d_inode, NULL);
}
l_dput(dchild);
case 1:
}
l_dput(dchild);
case 1:
CDEBUG(D_INODE, "recreated ino %lu with gen %u\n",
inode->i_ino, inode->i_generation);
} else {
CDEBUG(D_INODE, "recreated ino %lu with gen %u\n",
inode->i_ino, inode->i_generation);
} else {
struct lustre_handle child_ino_lockh;
struct lustre_handle child_ino_lockh;
CDEBUG(D_INODE, "created ino %lu with gen %x\n",
inode->i_ino, inode->i_generation);
CDEBUG(D_INODE, "created ino %lu with gen %x\n",
inode->i_ino, inode->i_generation);
/* The inode we were allocated may have just been freed
* by an unlink operation. We take this lock to
* synchronize against the matching reply-ack-lock taken
/* The inode we were allocated may have just been freed
* by an unlink operation. We take this lock to
* synchronize against the matching reply-ack-lock taken
} else {
ldlm_lock_decref(&child_ino_lockh, LCK_EX);
}
} else {
ldlm_lock_decref(&child_ino_lockh, LCK_EX);
}
}
rc = fsfilt_setattr(obd, dchild, handle, &iattr, 0);
}
rc = fsfilt_setattr(obd, dchild, handle, &iattr, 0);
struct mds_body *body = NULL;
struct inode *child_inode;
struct lustre_handle parent_lockh[2] = {{0}, {0}};
struct mds_body *body = NULL;
struct inode *child_inode;
struct lustre_handle parent_lockh[2] = {{0}, {0}};
- struct lustre_handle child_lockh = {0}, child_reuse_lockh = {0};
+ struct lustre_handle child_lockh = {0};
+#if 0
+ struct lustre_handle child_reuse_lockh = {0};
+#endif
struct lustre_handle * slave_lockh = NULL;
char fidname[LL_FID_NAMELEN];
void *handle = NULL;
struct lustre_handle * slave_lockh = NULL;
char fidname[LL_FID_NAMELEN];
void *handle = NULL;
if (rc)
GOTO(cleanup, rc);
if (rc)
GOTO(cleanup, rc);
/* Step 4: Get a lock on the ino to sync with creation WRT inode
* reuse (see bug 2029). */
rc = mds_lock_new_child(obd, child_inode, &child_reuse_lockh);
if (rc != ELDLM_OK)
GOTO(cleanup, rc);
/* Step 4: Get a lock on the ino to sync with creation WRT inode
* reuse (see bug 2029). */
rc = mds_lock_new_child(obd, child_inode, &child_reuse_lockh);
if (rc != ELDLM_OK)
GOTO(cleanup, rc);
cleanup_phase = 3; /* child inum lock */
OBD_FAIL_WRITE(OBD_FAIL_MDS_REINT_UNLINK_WRITE, dparent->d_inode->i_sb);
cleanup_phase = 3; /* child inum lock */
OBD_FAIL_WRITE(OBD_FAIL_MDS_REINT_UNLINK_WRITE, dparent->d_inode->i_sb);
(void)obd_set_info(mds->mds_osc_exp, strlen("unlinked"),
"unlinked", 0, NULL);
case 3: /* child ino-reuse lock */
(void)obd_set_info(mds->mds_osc_exp, strlen("unlinked"),
"unlinked", 0, NULL);
case 3: /* child ino-reuse lock */
if (rc && body != NULL) {
// Don't unlink the OST objects if the MDS unlink failed
body->valid = 0;
if (rc && body != NULL) {
// Don't unlink the OST objects if the MDS unlink failed
body->valid = 0;
ldlm_lock_decref(&child_reuse_lockh, LCK_EX);
else
ptlrpc_save_lock(req, &child_reuse_lockh, LCK_EX);
ldlm_lock_decref(&child_reuse_lockh, LCK_EX);
else
ptlrpc_save_lock(req, &child_reuse_lockh, LCK_EX);
case 2: /* child lock */
mds_unlock_slave_objs(obd, dchild, slave_lockh);
if (child_lockh.cookie)
case 2: /* child lock */
mds_unlock_slave_objs(obd, dchild, slave_lockh);
if (child_lockh.cookie)