Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30a4f5e8 authored by Mark Fasheh's avatar Mark Fasheh
Browse files

ocfs2: don't pass handle to ocfs2_meta_lock in ocfs2_unlink()



Take and drop the locks directly.

Signed-off-by: default avatarMark Fasheh <mark.fasheh@oracle.com>
parent 5098c27b
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -813,6 +813,7 @@ static int ocfs2_unlink(struct inode *dir,
			struct dentry *dentry)
{
	int status;
	int child_locked = 0;
	struct inode *inode = dentry->d_inode;
	struct inode *orphan_dir = NULL;
	struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
@@ -835,22 +836,14 @@ static int ocfs2_unlink(struct inode *dir,

	if (inode == osb->root_inode) {
		mlog(0, "Cannot delete the root directory\n");
		status = -EPERM;
		goto leave;
	}

	handle = ocfs2_alloc_handle(osb);
	if (handle == NULL) {
		status = -ENOMEM;
		mlog_errno(status);
		goto leave;
		return -EPERM;
	}

	status = ocfs2_meta_lock(dir, handle, &parent_node_bh, 1);
	status = ocfs2_meta_lock(dir, NULL, &parent_node_bh, 1);
	if (status < 0) {
		if (status != -ENOENT)
			mlog_errno(status);
		goto leave;
		return status;
	}

	status = ocfs2_find_files_on_disk(dentry->d_name.name,
@@ -871,12 +864,13 @@ static int ocfs2_unlink(struct inode *dir,
		goto leave;
	}

	status = ocfs2_meta_lock(inode, handle, &fe_bh, 1);
	status = ocfs2_meta_lock(inode, NULL, &fe_bh, 1);
	if (status < 0) {
		if (status != -ENOENT)
			mlog_errno(status);
		goto leave;
	}
	child_locked = 1;

	if (S_ISDIR(inode->i_mode)) {
	       	if (!ocfs2_empty_dir(inode)) {
@@ -906,7 +900,7 @@ static int ocfs2_unlink(struct inode *dir,
		}
	}

	handle = ocfs2_start_trans(osb, handle, OCFS2_UNLINK_CREDITS);
	handle = ocfs2_start_trans(osb, NULL, OCFS2_UNLINK_CREDITS);
	if (IS_ERR(handle)) {
		status = PTR_ERR(handle);
		handle = NULL;
@@ -964,6 +958,11 @@ static int ocfs2_unlink(struct inode *dir,
	if (handle)
		ocfs2_commit_trans(handle);

	if (child_locked)
		ocfs2_meta_unlock(inode, 1);

	ocfs2_meta_unlock(dir, 1);

	if (orphan_dir) {
		/* This was locked for us in ocfs2_prepare_orphan_dir() */
		ocfs2_meta_unlock(orphan_dir, 1);