You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
HPFS: Remove remaining locks
Remove remaining locks Because of a new global per-fs lock, no other locks are needed Signed-off-by: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
7dd29d8d86
commit
7d23ce36e3
+7
-46
@@ -29,7 +29,7 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
||||
fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh);
|
||||
if (!fnode)
|
||||
goto bail;
|
||||
dnode = hpfs_alloc_dnode(dir->i_sb, fno, &dno, &qbh0, 1);
|
||||
dnode = hpfs_alloc_dnode(dir->i_sb, fno, &dno, &qbh0);
|
||||
if (!dnode)
|
||||
goto bail1;
|
||||
memset(&dee, 0, sizeof dee);
|
||||
@@ -60,8 +60,7 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
||||
if (dee.read_only)
|
||||
result->i_mode &= ~0222;
|
||||
|
||||
mutex_lock(&hpfs_i(dir)->i_mutex);
|
||||
r = hpfs_add_dirent(dir, name, len, &dee, 0);
|
||||
r = hpfs_add_dirent(dir, name, len, &dee);
|
||||
if (r == 1)
|
||||
goto bail3;
|
||||
if (r == -1) {
|
||||
@@ -101,11 +100,9 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
||||
hpfs_write_inode_nolock(result);
|
||||
}
|
||||
d_instantiate(dentry, result);
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return 0;
|
||||
bail3:
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
iput(result);
|
||||
bail2:
|
||||
hpfs_brelse4(&qbh0);
|
||||
@@ -168,8 +165,7 @@ static int hpfs_create(struct inode *dir, struct dentry *dentry, int mode, struc
|
||||
result->i_data.a_ops = &hpfs_aops;
|
||||
hpfs_i(result)->mmu_private = 0;
|
||||
|
||||
mutex_lock(&hpfs_i(dir)->i_mutex);
|
||||
r = hpfs_add_dirent(dir, name, len, &dee, 0);
|
||||
r = hpfs_add_dirent(dir, name, len, &dee);
|
||||
if (r == 1)
|
||||
goto bail2;
|
||||
if (r == -1) {
|
||||
@@ -193,12 +189,10 @@ static int hpfs_create(struct inode *dir, struct dentry *dentry, int mode, struc
|
||||
hpfs_write_inode_nolock(result);
|
||||
}
|
||||
d_instantiate(dentry, result);
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return 0;
|
||||
|
||||
bail2:
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
iput(result);
|
||||
bail1:
|
||||
brelse(bh);
|
||||
@@ -254,8 +248,7 @@ static int hpfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t
|
||||
result->i_blocks = 1;
|
||||
init_special_inode(result, mode, rdev);
|
||||
|
||||
mutex_lock(&hpfs_i(dir)->i_mutex);
|
||||
r = hpfs_add_dirent(dir, name, len, &dee, 0);
|
||||
r = hpfs_add_dirent(dir, name, len, &dee);
|
||||
if (r == 1)
|
||||
goto bail2;
|
||||
if (r == -1) {
|
||||
@@ -271,12 +264,10 @@ static int hpfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t
|
||||
|
||||
hpfs_write_inode_nolock(result);
|
||||
d_instantiate(dentry, result);
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
brelse(bh);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return 0;
|
||||
bail2:
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
iput(result);
|
||||
bail1:
|
||||
brelse(bh);
|
||||
@@ -333,8 +324,7 @@ static int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *sy
|
||||
result->i_op = &page_symlink_inode_operations;
|
||||
result->i_data.a_ops = &hpfs_symlink_aops;
|
||||
|
||||
mutex_lock(&hpfs_i(dir)->i_mutex);
|
||||
r = hpfs_add_dirent(dir, name, len, &dee, 0);
|
||||
r = hpfs_add_dirent(dir, name, len, &dee);
|
||||
if (r == 1)
|
||||
goto bail2;
|
||||
if (r == -1) {
|
||||
@@ -352,11 +342,9 @@ static int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *sy
|
||||
|
||||
hpfs_write_inode_nolock(result);
|
||||
d_instantiate(dentry, result);
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return 0;
|
||||
bail2:
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
iput(result);
|
||||
bail1:
|
||||
brelse(bh);
|
||||
@@ -382,8 +370,6 @@ static int hpfs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
hpfs_lock(dir->i_sb);
|
||||
hpfs_adjust_length(name, &len);
|
||||
again:
|
||||
mutex_lock(&hpfs_i(inode)->i_parent_mutex);
|
||||
mutex_lock(&hpfs_i(dir)->i_mutex);
|
||||
err = -ENOENT;
|
||||
de = map_dirent(dir, hpfs_i(dir)->i_dno, name, len, &dno, &qbh);
|
||||
if (!de)
|
||||
@@ -410,8 +396,6 @@ again:
|
||||
if (rep++)
|
||||
break;
|
||||
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
mutex_unlock(&hpfs_i(inode)->i_parent_mutex);
|
||||
dentry_unhash(dentry);
|
||||
if (!d_unhashed(dentry)) {
|
||||
dput(dentry);
|
||||
@@ -445,8 +429,6 @@ again:
|
||||
out1:
|
||||
hpfs_brelse4(&qbh);
|
||||
out:
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
mutex_unlock(&hpfs_i(inode)->i_parent_mutex);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return err;
|
||||
}
|
||||
@@ -466,8 +448,6 @@ static int hpfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
|
||||
hpfs_adjust_length(name, &len);
|
||||
hpfs_lock(dir->i_sb);
|
||||
mutex_lock(&hpfs_i(inode)->i_parent_mutex);
|
||||
mutex_lock(&hpfs_i(dir)->i_mutex);
|
||||
err = -ENOENT;
|
||||
de = map_dirent(dir, hpfs_i(dir)->i_dno, name, len, &dno, &qbh);
|
||||
if (!de)
|
||||
@@ -505,8 +485,6 @@ static int hpfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
out1:
|
||||
hpfs_brelse4(&qbh);
|
||||
out:
|
||||
mutex_unlock(&hpfs_i(dir)->i_mutex);
|
||||
mutex_unlock(&hpfs_i(inode)->i_parent_mutex);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return err;
|
||||
}
|
||||
@@ -568,12 +546,6 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
|
||||
hpfs_lock(i->i_sb);
|
||||
/* order doesn't matter, due to VFS exclusion */
|
||||
mutex_lock(&hpfs_i(i)->i_parent_mutex);
|
||||
if (new_inode)
|
||||
mutex_lock(&hpfs_i(new_inode)->i_parent_mutex);
|
||||
mutex_lock(&hpfs_i(old_dir)->i_mutex);
|
||||
if (new_dir != old_dir)
|
||||
mutex_lock(&hpfs_i(new_dir)->i_mutex);
|
||||
|
||||
/* Erm? Moving over the empty non-busy directory is perfectly legal */
|
||||
if (new_inode && S_ISDIR(new_inode->i_mode)) {
|
||||
@@ -610,9 +582,7 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
|
||||
if (new_dir == old_dir) hpfs_brelse4(&qbh);
|
||||
|
||||
hpfs_lock_creation(i->i_sb);
|
||||
if ((r = hpfs_add_dirent(new_dir, new_name, new_len, &de, 1))) {
|
||||
hpfs_unlock_creation(i->i_sb);
|
||||
if ((r = hpfs_add_dirent(new_dir, new_name, new_len, &de))) {
|
||||
if (r == -1) hpfs_error(new_dir->i_sb, "hpfs_rename: dirent already exists!");
|
||||
err = r == 1 ? -ENOSPC : -EFSERROR;
|
||||
if (new_dir != old_dir) hpfs_brelse4(&qbh);
|
||||
@@ -621,20 +591,17 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
|
||||
if (new_dir == old_dir)
|
||||
if (!(dep = map_dirent(old_dir, hpfs_i(old_dir)->i_dno, old_name, old_len, &dno, &qbh))) {
|
||||
hpfs_unlock_creation(i->i_sb);
|
||||
hpfs_error(i->i_sb, "lookup succeeded but map dirent failed at #2");
|
||||
err = -ENOENT;
|
||||
goto end1;
|
||||
}
|
||||
|
||||
if ((r = hpfs_remove_dirent(old_dir, dno, dep, &qbh, 0))) {
|
||||
hpfs_unlock_creation(i->i_sb);
|
||||
hpfs_error(i->i_sb, "hpfs_rename: could not remove dirent");
|
||||
err = r == 2 ? -ENOSPC : -EFSERROR;
|
||||
goto end1;
|
||||
}
|
||||
hpfs_unlock_creation(i->i_sb);
|
||||
|
||||
|
||||
end:
|
||||
hpfs_i(i)->i_parent_dir = new_dir->i_ino;
|
||||
if (S_ISDIR(i->i_mode)) {
|
||||
@@ -652,12 +619,6 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
hpfs_i(i)->i_conv = hpfs_sb(i->i_sb)->sb_conv;
|
||||
hpfs_decide_conv(i, new_name, new_len);
|
||||
end1:
|
||||
if (old_dir != new_dir)
|
||||
mutex_unlock(&hpfs_i(new_dir)->i_mutex);
|
||||
mutex_unlock(&hpfs_i(old_dir)->i_mutex);
|
||||
mutex_unlock(&hpfs_i(i)->i_parent_mutex);
|
||||
if (new_inode)
|
||||
mutex_unlock(&hpfs_i(new_inode)->i_parent_mutex);
|
||||
hpfs_unlock(i->i_sb);
|
||||
return err;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user