VFS: normal filesystems (and lustre): d_inode() annotations
that's the bulk of filesystem drivers dealing with inodes of their own Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -224,14 +224,14 @@ static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry)
|
||||
{
|
||||
struct jffs2_sb_info *c = JFFS2_SB_INFO(dir_i->i_sb);
|
||||
struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
|
||||
struct jffs2_inode_info *dead_f = JFFS2_INODE_INFO(dentry->d_inode);
|
||||
struct jffs2_inode_info *dead_f = JFFS2_INODE_INFO(d_inode(dentry));
|
||||
int ret;
|
||||
uint32_t now = get_seconds();
|
||||
|
||||
ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name,
|
||||
dentry->d_name.len, dead_f, now);
|
||||
if (dead_f->inocache)
|
||||
set_nlink(dentry->d_inode, dead_f->inocache->pino_nlink);
|
||||
set_nlink(d_inode(dentry), dead_f->inocache->pino_nlink);
|
||||
if (!ret)
|
||||
dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
|
||||
return ret;
|
||||
@@ -241,8 +241,8 @@ static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry)
|
||||
|
||||
static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct dentry *dentry)
|
||||
{
|
||||
struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dentry->d_inode->i_sb);
|
||||
struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_dentry->d_inode);
|
||||
struct jffs2_sb_info *c = JFFS2_SB_INFO(d_inode(old_dentry)->i_sb);
|
||||
struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode(old_dentry));
|
||||
struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
|
||||
int ret;
|
||||
uint8_t type;
|
||||
@@ -256,7 +256,7 @@ static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct de
|
||||
return -EPERM;
|
||||
|
||||
/* XXX: This is ugly */
|
||||
type = (old_dentry->d_inode->i_mode & S_IFMT) >> 12;
|
||||
type = (d_inode(old_dentry)->i_mode & S_IFMT) >> 12;
|
||||
if (!type) type = DT_REG;
|
||||
|
||||
now = get_seconds();
|
||||
@@ -264,11 +264,11 @@ static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct de
|
||||
|
||||
if (!ret) {
|
||||
mutex_lock(&f->sem);
|
||||
set_nlink(old_dentry->d_inode, ++f->inocache->pino_nlink);
|
||||
set_nlink(d_inode(old_dentry), ++f->inocache->pino_nlink);
|
||||
mutex_unlock(&f->sem);
|
||||
d_instantiate(dentry, old_dentry->d_inode);
|
||||
d_instantiate(dentry, d_inode(old_dentry));
|
||||
dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
|
||||
ihold(old_dentry->d_inode);
|
||||
ihold(d_inode(old_dentry));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -585,7 +585,7 @@ static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry)
|
||||
{
|
||||
struct jffs2_sb_info *c = JFFS2_SB_INFO(dir_i->i_sb);
|
||||
struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
|
||||
struct jffs2_inode_info *f = JFFS2_INODE_INFO(dentry->d_inode);
|
||||
struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode(dentry));
|
||||
struct jffs2_full_dirent *fd;
|
||||
int ret;
|
||||
uint32_t now = get_seconds();
|
||||
@@ -599,7 +599,7 @@ static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry)
|
||||
dentry->d_name.len, f, now);
|
||||
if (!ret) {
|
||||
dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
|
||||
clear_nlink(dentry->d_inode);
|
||||
clear_nlink(d_inode(dentry));
|
||||
drop_nlink(dir_i);
|
||||
}
|
||||
return ret;
|
||||
@@ -770,8 +770,8 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
|
||||
* the VFS can't check whether the victim is empty. The filesystem
|
||||
* needs to do that for itself.
|
||||
*/
|
||||
if (new_dentry->d_inode) {
|
||||
victim_f = JFFS2_INODE_INFO(new_dentry->d_inode);
|
||||
if (d_really_is_positive(new_dentry)) {
|
||||
victim_f = JFFS2_INODE_INFO(d_inode(new_dentry));
|
||||
if (d_is_dir(new_dentry)) {
|
||||
struct jffs2_full_dirent *fd;
|
||||
|
||||
@@ -794,12 +794,12 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
|
||||
/* Make a hard link */
|
||||
|
||||
/* XXX: This is ugly */
|
||||
type = (old_dentry->d_inode->i_mode & S_IFMT) >> 12;
|
||||
type = (d_inode(old_dentry)->i_mode & S_IFMT) >> 12;
|
||||
if (!type) type = DT_REG;
|
||||
|
||||
now = get_seconds();
|
||||
ret = jffs2_do_link(c, JFFS2_INODE_INFO(new_dir_i),
|
||||
old_dentry->d_inode->i_ino, type,
|
||||
d_inode(old_dentry)->i_ino, type,
|
||||
new_dentry->d_name.name, new_dentry->d_name.len, now);
|
||||
|
||||
if (ret)
|
||||
@@ -808,9 +808,9 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
|
||||
if (victim_f) {
|
||||
/* There was a victim. Kill it off nicely */
|
||||
if (d_is_dir(new_dentry))
|
||||
clear_nlink(new_dentry->d_inode);
|
||||
clear_nlink(d_inode(new_dentry));
|
||||
else
|
||||
drop_nlink(new_dentry->d_inode);
|
||||
drop_nlink(d_inode(new_dentry));
|
||||
/* Don't oops if the victim was a dirent pointing to an
|
||||
inode which didn't exist. */
|
||||
if (victim_f->inocache) {
|
||||
@@ -836,9 +836,9 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
|
||||
|
||||
if (ret) {
|
||||
/* Oh shit. We really ought to make a single node which can do both atomically */
|
||||
struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_dentry->d_inode);
|
||||
struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode(old_dentry));
|
||||
mutex_lock(&f->sem);
|
||||
inc_nlink(old_dentry->d_inode);
|
||||
inc_nlink(d_inode(old_dentry));
|
||||
if (f->inocache && !d_is_dir(old_dentry))
|
||||
f->inocache->pino_nlink++;
|
||||
mutex_unlock(&f->sem);
|
||||
@@ -846,8 +846,8 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
|
||||
pr_notice("%s(): Link succeeded, unlink failed (err %d). You now have a hard link\n",
|
||||
__func__, ret);
|
||||
/* Might as well let the VFS know */
|
||||
d_instantiate(new_dentry, old_dentry->d_inode);
|
||||
ihold(old_dentry->d_inode);
|
||||
d_instantiate(new_dentry, d_inode(old_dentry));
|
||||
ihold(d_inode(old_dentry));
|
||||
new_dir_i->i_mtime = new_dir_i->i_ctime = ITIME(now);
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user