goto out_sb;
retry:
- odf_lock(UNIONFS_SB(sb)->odf->odi_ic);
BUG_ON(!S_ISDIR(d_upper->d_inode->i_mode));
i_odf = d_odf->d_inode;
}
/* lock to prevent concurrent writes */
- odf_lock(UNIONFS_D(d_upper)->odf_info);
+ /* LOCK: need to lock ic? */
/* Process the hidden directories with rdutil_callback as a filldir. */
for (bindex = bstart; bindex <= bend; bindex++) {
hidden_dentry = unionfs_lower_dentry_idx(d_upper, bindex);
err = PTR_ERR(hidden_file);
dput(hidden_dentry);
branchput(sb, bindex);
- goto out_unlock;
+ goto out;
}
do {
branchput(sb, bindex);
if (err < 0)
- goto out_unlock;
+ goto out;
}
- odf_unlock(UNIONFS_D(d_upper)->odf_info);
/* set mtime of odf file to that of higher file */
attr.ia_mtime = *mtime;
err = notify_change(d_odf, &attr);
goto out;
-out_unlock:
- odf_unlock(UNIONFS_D(d_upper)->odf_info);
-
out:
if (buf && buf->rdstate)
free_rdstate(buf->rdstate);
filp_close(odf_file, NULL);
odf_file = NULL;
- odf_unlock(UNIONFS_SB(sb)->odf->odi_ic);
-
if (err == -ENOSPC && !cleaned) {
cleaned = 1;
wake_up_and_wait_sioa(UNIONFS_SB(sb)->odf->cleanup);
goto out;
}
sprintf(new_name, "%lu", odf_dentry->d_inode->i_ino);
- /* lock new dir, the old dir should already be locked */
- odf_lock(odi);
old_dentry = odf_dentry;
old_dir = odf_dentry->d_parent->d_inode;
new_dentry = lookup_one_len(new_name, odi->dentry, strlen(new_name));
if (IS_ERR(new_dentry)) {
err = PTR_ERR(new_dentry);
- goto out_unlock;
+ goto out;
}
lock_rename(old_dentry->d_parent, new_dentry->d_parent);
unlock_rename(old_dentry->d_parent, new_dentry->d_parent);
dput(new_dentry);
-out_unlock:
- odf_unlock(odi); /* unlock new dir */
-
out:
kfree(new_name);
return err;
}
sprintf(name, "%lu", inode->i_ino);
- odf_lock(odi_sr);
- odf_lock(odi_rc);
+ /* LOCK: need to lock sr? */
/* check for an entry in /odf/sr */
old_dentry = lookup_one_len(name, odi_sr->dentry, strlen(name));
unlock_rename(old_dentry->d_parent, new_dentry->d_parent);
out_unlock:
- odf_unlock(odi_rc);
- odf_unlock(odi_sr);
dput(old_dentry);
dput(new_dentry);
out:
if (UNIONFS_D(new_dentry)->odf_info)
err = odf_remove(new_dentry, ODF_RMV_ANY);
- odf_lock(UNIONFS_D(old_dentry)->odf_info);
- odf_lock(UNIONFS_D(new_dentry->d_parent)->odf_info);
-
old_odfdentry = UNIONFS_D(old_dentry)->odf_info->dentry;
old_dir = old_odfdentry->d_parent;
new_dir = (UNIONFS_D(new_dentry->d_parent))->odf_info->dentry;
dput(new_odfdentry);
out_unlock:
- odf_unlock(UNIONFS_D(old_dentry)->odf_info);
- odf_unlock(UNIONFS_D(new_dentry->d_parent)->odf_info);
err = odf_lookup(old_dentry->d_parent, old_dentry, 0);
out:
return err;
if (UNIONFS_D(new_dentry)->odf_info)
err = odf_remove(new_dentry, ODF_RMV_ANY);
- odf_lock(UNIONFS_D(old_dentry)->odf_info);
- odf_lock(UNIONFS_D(new_dentry->d_parent)->odf_info);
old_odfdentry = UNIONFS_D(old_dentry)->odf_info->dentry;
old_dir = old_odfdentry->d_parent;
new_dir = (UNIONFS_D(new_dentry->d_parent))->odf_info->dentry;
new_dentry->d_name.len);
if (IS_ERR(new_odfdentry)) {
err = PTR_ERR(new_odfdentry);
- goto out_unlock;
+ goto out;
}
/* this should never happen */
current->fsgid = oldgid;
dput(new_odfdentry);
-out_unlock:
- odf_unlock(UNIONFS_D(old_dentry)->odf_info);
- odf_unlock(UNIONFS_D(new_dentry->d_parent)->odf_info);
out:
return err;
}
if (branch_dst >= 0)
dst_ro = is_robranch_super(dentry->d_sb, branch_dst);
- odf_lock(UNIONFS_D(dentry->d_parent)->odf_info);
-
/* case 0:
* - dest branch id has changed because of remounts
* - do not copyup, remove copyup info from link info file
if (err != sizeof(__le32)){
set_fs(oldfs);
err = -EIO;
- goto out_unlock;
+ goto out;
}
le64 = 0;
if (err != sizeof(__le64)){
set_fs(oldfs);
err = -EIO;
- goto out_unlock;
+ goto out;
}
set_fs(oldfs);
if (!lower_dentry || IS_ERR(lower_dentry)) {
if (IS_ERR(lower_dentry))
err = PTR_ERR(lower_dentry);
- goto out_unlock;
+ goto out;
}
/* now link */
}
;
}
-
-out_unlock:
- odf_unlock(UNIONFS_D(dentry->d_parent)->odf_info);
- goto out;
out_fs:
set_fs(oldfs);
out:
BUG_ON(len==1 || (name[1]=='.'&&len==2));
retry:
/* FIXME need to check hardlinks before create */
- if (!(flags & ODF_LOOKUP_LOCKED)){
- if (osi->odi_ic != parent)
- odf_lock(osi->odi_ic);
- odf_lock(parent); /* lock parent */
- }
- else if (cleaned)
- odf_lock(osi->odi_ic);
-
if (link && (flags & (ODF_LOOKUP_FILE | ODF_LOOKUP_LINK))) {
/* link to the given dentry */
vfs_link(link, odf_dentry->d_parent->d_inode, odf_dentry);
}
else {
dput(odf_dentry);
- if (!(flags & ODF_LOOKUP_LOCKED)){
- odf_unlock(parent);
- if (osi->odi_ic != parent)
- odf_unlock(osi->odi_ic);
- }
odf_put_info(old_odi);
odi = NULL;
goto out;
}
- if (!(flags & ODF_LOOKUP_LOCKED)){
- odf_unlock(parent);
- if (osi->odi_ic != parent)
- odf_unlock(osi->odi_ic);
- }
- else if (cleaned)
- odf_unlock(osi->odi_ic);
current->fsuid = olduid;
current->fsgid = oldgid;
if (err) {
if (err == -ENOSPC && !cleaned) {
/* let the cleanup thread do its work and retry once */
- if (flags & ODF_LOOKUP_LOCKED)
- odf_unlock(osi->odi_ic);
cleaned = 1;
wake_up_and_wait_sioa(osi->cleanup);
goto retry;
goto out;
odf_dir = UNIONFS_D(dentry->d_parent)->odf_info;
- odf_lock(odf_dir);
/* remove */
current->fsuid = 0;
current->fsuid = olduid;
current->fsgid = oldgid;
if (err)
- goto out_unlock;
+ goto out;
/* clean up */
odf_put_info(odi);
UNIONFS_D(dentry)->odf_info = NULL;
-out_unlock:
- odf_unlock(odf_dir);
out:
return err;
}
odi->inum = odf_dentry->d_inode->i_ino;
odi->osi = osi;
dget(odf_dentry);
- mutex_init(&odi->lock);
return odi;
}
struct odf_dentry_info *odf_fill_info(struct odf_dentry_info *odi, struct odf_sb_info *osi, struct dentry *odf_dentry)
/* update timeout */
sioa_args->timeout = msecs_to_jiffies(cl->attr->timeout->val * 1000);
- odf_lock(cl->odf->odi_ic);
- odf_lock(cl->odf->odi_rc);
+ /* LOCK: need to lock ic/reclaim/sr? */
vfs_statfs(cl->odf->sb, &stat);
if (cl->force) {
}
cl->success = err;
}
- odf_unlock(cl->odf->odi_ic);
- odf_unlock(cl->odf->odi_rc);
}