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>
此提交包含在:
42
fs/afs/dir.c
42
fs/afs/dir.c
@@ -505,7 +505,7 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
|
||||
_enter("{%x:%u},%p{%pd},",
|
||||
vnode->fid.vid, vnode->fid.vnode, dentry, dentry);
|
||||
|
||||
ASSERTCMP(dentry->d_inode, ==, NULL);
|
||||
ASSERTCMP(d_inode(dentry), ==, NULL);
|
||||
|
||||
if (dentry->d_name.len >= AFSNAMEMAX) {
|
||||
_leave(" = -ENAMETOOLONG");
|
||||
@@ -563,8 +563,8 @@ success:
|
||||
_leave(" = 0 { vn=%u u=%u } -> { ino=%lu v=%u }",
|
||||
fid.vnode,
|
||||
fid.unique,
|
||||
dentry->d_inode->i_ino,
|
||||
dentry->d_inode->i_generation);
|
||||
d_inode(dentry)->i_ino,
|
||||
d_inode(dentry)->i_generation);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@@ -586,9 +586,9 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
if (flags & LOOKUP_RCU)
|
||||
return -ECHILD;
|
||||
|
||||
vnode = AFS_FS_I(dentry->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(dentry));
|
||||
|
||||
if (dentry->d_inode)
|
||||
if (d_really_is_positive(dentry))
|
||||
_enter("{v={%x:%u} n=%pd fl=%lx},",
|
||||
vnode->fid.vid, vnode->fid.vnode, dentry,
|
||||
vnode->flags);
|
||||
@@ -601,7 +601,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
|
||||
/* lock down the parent dentry so we can peer at it */
|
||||
parent = dget_parent(dentry);
|
||||
dir = AFS_FS_I(parent->d_inode);
|
||||
dir = AFS_FS_I(d_inode(parent));
|
||||
|
||||
/* validate the parent directory */
|
||||
if (test_bit(AFS_VNODE_MODIFIED, &dir->flags))
|
||||
@@ -623,9 +623,9 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
switch (ret) {
|
||||
case 0:
|
||||
/* the filename maps to something */
|
||||
if (!dentry->d_inode)
|
||||
if (d_really_is_negative(dentry))
|
||||
goto out_bad;
|
||||
if (is_bad_inode(dentry->d_inode)) {
|
||||
if (is_bad_inode(d_inode(dentry))) {
|
||||
printk("kAFS: afs_d_revalidate: %pd2 has bad inode\n",
|
||||
dentry);
|
||||
goto out_bad;
|
||||
@@ -647,7 +647,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
_debug("%pd: file deleted (uq %u -> %u I:%u)",
|
||||
dentry, fid.unique,
|
||||
vnode->fid.unique,
|
||||
dentry->d_inode->i_generation);
|
||||
d_inode(dentry)->i_generation);
|
||||
spin_lock(&vnode->lock);
|
||||
set_bit(AFS_VNODE_DELETED, &vnode->flags);
|
||||
spin_unlock(&vnode->lock);
|
||||
@@ -658,7 +658,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
case -ENOENT:
|
||||
/* the filename is unknown */
|
||||
_debug("%pd: dirent not found", dentry);
|
||||
if (dentry->d_inode)
|
||||
if (d_really_is_positive(dentry))
|
||||
goto not_found;
|
||||
goto out_valid;
|
||||
|
||||
@@ -703,9 +703,9 @@ static int afs_d_delete(const struct dentry *dentry)
|
||||
if (dentry->d_flags & DCACHE_NFSFS_RENAMED)
|
||||
goto zap;
|
||||
|
||||
if (dentry->d_inode &&
|
||||
(test_bit(AFS_VNODE_DELETED, &AFS_FS_I(dentry->d_inode)->flags) ||
|
||||
test_bit(AFS_VNODE_PSEUDODIR, &AFS_FS_I(dentry->d_inode)->flags)))
|
||||
if (d_really_is_positive(dentry) &&
|
||||
(test_bit(AFS_VNODE_DELETED, &AFS_FS_I(d_inode(dentry))->flags) ||
|
||||
test_bit(AFS_VNODE_PSEUDODIR, &AFS_FS_I(d_inode(dentry))->flags)))
|
||||
goto zap;
|
||||
|
||||
_leave(" = 0 [keep]");
|
||||
@@ -814,8 +814,8 @@ static int afs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
if (ret < 0)
|
||||
goto rmdir_error;
|
||||
|
||||
if (dentry->d_inode) {
|
||||
vnode = AFS_FS_I(dentry->d_inode);
|
||||
if (d_really_is_positive(dentry)) {
|
||||
vnode = AFS_FS_I(d_inode(dentry));
|
||||
clear_nlink(&vnode->vfs_inode);
|
||||
set_bit(AFS_VNODE_DELETED, &vnode->flags);
|
||||
afs_discard_callback_on_delete(vnode);
|
||||
@@ -856,8 +856,8 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (dentry->d_inode) {
|
||||
vnode = AFS_FS_I(dentry->d_inode);
|
||||
if (d_really_is_positive(dentry)) {
|
||||
vnode = AFS_FS_I(d_inode(dentry));
|
||||
|
||||
/* make sure we have a callback promise on the victim */
|
||||
ret = afs_validate(vnode, key);
|
||||
@@ -869,7 +869,7 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
if (ret < 0)
|
||||
goto remove_error;
|
||||
|
||||
if (dentry->d_inode) {
|
||||
if (d_really_is_positive(dentry)) {
|
||||
/* if the file wasn't deleted due to excess hard links, the
|
||||
* fileserver will break the callback promise on the file - if
|
||||
* it had one - before it returns to us, and if it was deleted,
|
||||
@@ -879,7 +879,7 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
* or it was outstanding on a different server, then it won't
|
||||
* break it either...
|
||||
*/
|
||||
vnode = AFS_FS_I(dentry->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(dentry));
|
||||
if (test_bit(AFS_VNODE_DELETED, &vnode->flags))
|
||||
_debug("AFS_VNODE_DELETED");
|
||||
if (test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags))
|
||||
@@ -977,7 +977,7 @@ static int afs_link(struct dentry *from, struct inode *dir,
|
||||
struct key *key;
|
||||
int ret;
|
||||
|
||||
vnode = AFS_FS_I(from->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(from));
|
||||
dvnode = AFS_FS_I(dir);
|
||||
|
||||
_enter("{%x:%u},{%x:%u},{%pd}",
|
||||
@@ -1089,7 +1089,7 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
struct key *key;
|
||||
int ret;
|
||||
|
||||
vnode = AFS_FS_I(old_dentry->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(old_dentry));
|
||||
orig_dvnode = AFS_FS_I(old_dir);
|
||||
new_dvnode = AFS_FS_I(new_dir);
|
||||
|
||||
|
@@ -379,7 +379,7 @@ int afs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
|
||||
_enter("{ ino=%lu v=%u }", inode->i_ino, inode->i_generation);
|
||||
|
||||
@@ -458,7 +458,7 @@ void afs_evict_inode(struct inode *inode)
|
||||
*/
|
||||
int afs_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
struct afs_vnode *vnode = AFS_FS_I(dentry->d_inode);
|
||||
struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry));
|
||||
struct key *key;
|
||||
int ret;
|
||||
|
||||
|
@@ -134,7 +134,7 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
|
||||
|
||||
_enter("{%pd}", mntpt);
|
||||
|
||||
BUG_ON(!mntpt->d_inode);
|
||||
BUG_ON(!d_inode(mntpt));
|
||||
|
||||
ret = -ENOMEM;
|
||||
devname = (char *) get_zeroed_page(GFP_KERNEL);
|
||||
@@ -145,7 +145,7 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
|
||||
if (!options)
|
||||
goto error_no_options;
|
||||
|
||||
vnode = AFS_FS_I(mntpt->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(mntpt));
|
||||
if (test_bit(AFS_VNODE_PSEUDODIR, &vnode->flags)) {
|
||||
/* if the directory is a pseudo directory, use the d_name */
|
||||
static const char afs_root_cell[] = ":root.cell.";
|
||||
@@ -169,14 +169,14 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
|
||||
}
|
||||
} else {
|
||||
/* read the contents of the AFS special symlink */
|
||||
loff_t size = i_size_read(mntpt->d_inode);
|
||||
loff_t size = i_size_read(d_inode(mntpt));
|
||||
char *buf;
|
||||
|
||||
ret = -EINVAL;
|
||||
if (size > PAGE_SIZE - 1)
|
||||
goto error_no_page;
|
||||
|
||||
page = read_mapping_page(mntpt->d_inode->i_mapping, 0, NULL);
|
||||
page = read_mapping_page(d_inode(mntpt)->i_mapping, 0, NULL);
|
||||
if (IS_ERR(page)) {
|
||||
ret = PTR_ERR(page);
|
||||
goto error_no_page;
|
||||
|
@@ -529,7 +529,7 @@ static void afs_destroy_inode(struct inode *inode)
|
||||
static int afs_statfs(struct dentry *dentry, struct kstatfs *buf)
|
||||
{
|
||||
struct afs_volume_status vs;
|
||||
struct afs_vnode *vnode = AFS_FS_I(dentry->d_inode);
|
||||
struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry));
|
||||
struct key *key;
|
||||
int ret;
|
||||
|
||||
|
新增問題並參考
封鎖使用者