aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2015-03-17 18:25:59 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2015-04-15 15:06:57 -0400
commit2b0143b5c986be1ce8408b3aadc4709e0a94429d (patch)
tree98b1dee70f3d5d9ac9309f4638e41864ddcd0952 /fs/ceph
parentce0b16ddf18df35026164fda4a642ef10c01f442 (diff)
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>
Diffstat (limited to 'fs/ceph')
-rw-r--r--fs/ceph/caps.c2
-rw-r--r--fs/ceph/debugfs.c2
-rw-r--r--fs/ceph/dir.c60
-rw-r--r--fs/ceph/export.c28
-rw-r--r--fs/ceph/file.c4
-rw-r--r--fs/ceph/inode.c52
-rw-r--r--fs/ceph/mds_client.c24
-rw-r--r--fs/ceph/super.c4
-rw-r--r--fs/ceph/xattr.c16
9 files changed, 96 insertions, 96 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 8172775428a0..283cf69c6904 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -3391,7 +3391,7 @@ int ceph_encode_inode_release(void **p, struct inode *inode,
3391int ceph_encode_dentry_release(void **p, struct dentry *dentry, 3391int ceph_encode_dentry_release(void **p, struct dentry *dentry,
3392 int mds, int drop, int unless) 3392 int mds, int drop, int unless)
3393{ 3393{
3394 struct inode *dir = dentry->d_parent->d_inode; 3394 struct inode *dir = d_inode(dentry->d_parent);
3395 struct ceph_mds_request_release *rel = *p; 3395 struct ceph_mds_request_release *rel = *p;
3396 struct ceph_dentry_info *di = ceph_dentry(dentry); 3396 struct ceph_dentry_info *di = ceph_dentry(dentry);
3397 int force = 0; 3397 int force = 0;
diff --git a/fs/ceph/debugfs.c b/fs/ceph/debugfs.c
index 1b2355109b9f..31f831471ed2 100644
--- a/fs/ceph/debugfs.c
+++ b/fs/ceph/debugfs.c
@@ -84,7 +84,7 @@ static int mdsc_show(struct seq_file *s, void *p)
84 path = NULL; 84 path = NULL;
85 spin_lock(&req->r_dentry->d_lock); 85 spin_lock(&req->r_dentry->d_lock);
86 seq_printf(s, " #%llx/%pd (%s)", 86 seq_printf(s, " #%llx/%pd (%s)",
87 ceph_ino(req->r_dentry->d_parent->d_inode), 87 ceph_ino(d_inode(req->r_dentry->d_parent)),
88 req->r_dentry, 88 req->r_dentry,
89 path ? path : ""); 89 path ? path : "");
90 spin_unlock(&req->r_dentry->d_lock); 90 spin_unlock(&req->r_dentry->d_lock);
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
index 83e9976f7189..173fc598c7f1 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -49,9 +49,9 @@ int ceph_init_dentry(struct dentry *dentry)
49 goto out_unlock; 49 goto out_unlock;
50 } 50 }
51 51
52 if (ceph_snap(dentry->d_parent->d_inode) == CEPH_NOSNAP) 52 if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_NOSNAP)
53 d_set_d_op(dentry, &ceph_dentry_ops); 53 d_set_d_op(dentry, &ceph_dentry_ops);
54 else if (ceph_snap(dentry->d_parent->d_inode) == CEPH_SNAPDIR) 54 else if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_SNAPDIR)
55 d_set_d_op(dentry, &ceph_snapdir_dentry_ops); 55 d_set_d_op(dentry, &ceph_snapdir_dentry_ops);
56 else 56 else
57 d_set_d_op(dentry, &ceph_snap_dentry_ops); 57 d_set_d_op(dentry, &ceph_snap_dentry_ops);
@@ -77,7 +77,7 @@ struct inode *ceph_get_dentry_parent_inode(struct dentry *dentry)
77 77
78 spin_lock(&dentry->d_lock); 78 spin_lock(&dentry->d_lock);
79 if (!IS_ROOT(dentry)) { 79 if (!IS_ROOT(dentry)) {
80 inode = dentry->d_parent->d_inode; 80 inode = d_inode(dentry->d_parent);
81 ihold(inode); 81 ihold(inode);
82 } 82 }
83 spin_unlock(&dentry->d_lock); 83 spin_unlock(&dentry->d_lock);
@@ -122,7 +122,7 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx,
122{ 122{
123 struct ceph_file_info *fi = file->private_data; 123 struct ceph_file_info *fi = file->private_data;
124 struct dentry *parent = file->f_path.dentry; 124 struct dentry *parent = file->f_path.dentry;
125 struct inode *dir = parent->d_inode; 125 struct inode *dir = d_inode(parent);
126 struct list_head *p; 126 struct list_head *p;
127 struct dentry *dentry, *last; 127 struct dentry *dentry, *last;
128 struct ceph_dentry_info *di; 128 struct ceph_dentry_info *di;
@@ -161,15 +161,15 @@ more:
161 } 161 }
162 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); 162 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
163 if (di->lease_shared_gen == shared_gen && 163 if (di->lease_shared_gen == shared_gen &&
164 !d_unhashed(dentry) && dentry->d_inode && 164 !d_unhashed(dentry) && d_really_is_positive(dentry) &&
165 ceph_snap(dentry->d_inode) != CEPH_SNAPDIR && 165 ceph_snap(d_inode(dentry)) != CEPH_SNAPDIR &&
166 ceph_ino(dentry->d_inode) != CEPH_INO_CEPH && 166 ceph_ino(d_inode(dentry)) != CEPH_INO_CEPH &&
167 fpos_cmp(ctx->pos, di->offset) <= 0) 167 fpos_cmp(ctx->pos, di->offset) <= 0)
168 break; 168 break;
169 dout(" skipping %p %pd at %llu (%llu)%s%s\n", dentry, 169 dout(" skipping %p %pd at %llu (%llu)%s%s\n", dentry,
170 dentry, di->offset, 170 dentry, di->offset,
171 ctx->pos, d_unhashed(dentry) ? " unhashed" : "", 171 ctx->pos, d_unhashed(dentry) ? " unhashed" : "",
172 !dentry->d_inode ? " null" : ""); 172 !d_inode(dentry) ? " null" : "");
173 spin_unlock(&dentry->d_lock); 173 spin_unlock(&dentry->d_lock);
174 p = p->prev; 174 p = p->prev;
175 dentry = list_entry(p, struct dentry, d_child); 175 dentry = list_entry(p, struct dentry, d_child);
@@ -189,11 +189,11 @@ more:
189 } 189 }
190 190
191 dout(" %llu (%llu) dentry %p %pd %p\n", di->offset, ctx->pos, 191 dout(" %llu (%llu) dentry %p %pd %p\n", di->offset, ctx->pos,
192 dentry, dentry, dentry->d_inode); 192 dentry, dentry, d_inode(dentry));
193 if (!dir_emit(ctx, dentry->d_name.name, 193 if (!dir_emit(ctx, dentry->d_name.name,
194 dentry->d_name.len, 194 dentry->d_name.len,
195 ceph_translate_ino(dentry->d_sb, dentry->d_inode->i_ino), 195 ceph_translate_ino(dentry->d_sb, d_inode(dentry)->i_ino),
196 dentry->d_inode->i_mode >> 12)) { 196 d_inode(dentry)->i_mode >> 12)) {
197 if (last) { 197 if (last) {
198 /* remember our position */ 198 /* remember our position */
199 fi->dentry = last; 199 fi->dentry = last;
@@ -535,7 +535,7 @@ int ceph_handle_snapdir(struct ceph_mds_request *req,
535 struct dentry *dentry, int err) 535 struct dentry *dentry, int err)
536{ 536{
537 struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb); 537 struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
538 struct inode *parent = dentry->d_parent->d_inode; /* we hold i_mutex */ 538 struct inode *parent = d_inode(dentry->d_parent); /* we hold i_mutex */
539 539
540 /* .snap dir? */ 540 /* .snap dir? */
541 if (err == -ENOENT && 541 if (err == -ENOENT &&
@@ -571,8 +571,8 @@ struct dentry *ceph_finish_lookup(struct ceph_mds_request *req,
571 err = 0; 571 err = 0;
572 if (!req->r_reply_info.head->is_dentry) { 572 if (!req->r_reply_info.head->is_dentry) {
573 dout("ENOENT and no trace, dentry %p inode %p\n", 573 dout("ENOENT and no trace, dentry %p inode %p\n",
574 dentry, dentry->d_inode); 574 dentry, d_inode(dentry));
575 if (dentry->d_inode) { 575 if (d_really_is_positive(dentry)) {
576 d_drop(dentry); 576 d_drop(dentry);
577 err = -ENOENT; 577 err = -ENOENT;
578 } else { 578 } else {
@@ -619,7 +619,7 @@ static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry,
619 return ERR_PTR(err); 619 return ERR_PTR(err);
620 620
621 /* can we conclude ENOENT locally? */ 621 /* can we conclude ENOENT locally? */
622 if (dentry->d_inode == NULL) { 622 if (d_really_is_negative(dentry)) {
623 struct ceph_inode_info *ci = ceph_inode(dir); 623 struct ceph_inode_info *ci = ceph_inode(dir);
624 struct ceph_dentry_info *di = ceph_dentry(dentry); 624 struct ceph_dentry_info *di = ceph_dentry(dentry);
625 625
@@ -725,7 +725,7 @@ static int ceph_mknod(struct inode *dir, struct dentry *dentry,
725 ceph_mdsc_put_request(req); 725 ceph_mdsc_put_request(req);
726out: 726out:
727 if (!err) 727 if (!err)
728 ceph_init_inode_acls(dentry->d_inode, &acls); 728 ceph_init_inode_acls(d_inode(dentry), &acls);
729 else 729 else
730 d_drop(dentry); 730 d_drop(dentry);
731 ceph_release_acls_info(&acls); 731 ceph_release_acls_info(&acls);
@@ -821,7 +821,7 @@ static int ceph_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
821 ceph_mdsc_put_request(req); 821 ceph_mdsc_put_request(req);
822out: 822out:
823 if (!err) 823 if (!err)
824 ceph_init_inode_acls(dentry->d_inode, &acls); 824 ceph_init_inode_acls(d_inode(dentry), &acls);
825 else 825 else
826 d_drop(dentry); 826 d_drop(dentry);
827 ceph_release_acls_info(&acls); 827 ceph_release_acls_info(&acls);
@@ -858,8 +858,8 @@ static int ceph_link(struct dentry *old_dentry, struct inode *dir,
858 if (err) { 858 if (err) {
859 d_drop(dentry); 859 d_drop(dentry);
860 } else if (!req->r_reply_info.head->is_dentry) { 860 } else if (!req->r_reply_info.head->is_dentry) {
861 ihold(old_dentry->d_inode); 861 ihold(d_inode(old_dentry));
862 d_instantiate(dentry, old_dentry->d_inode); 862 d_instantiate(dentry, d_inode(old_dentry));
863 } 863 }
864 ceph_mdsc_put_request(req); 864 ceph_mdsc_put_request(req);
865 return err; 865 return err;
@@ -892,7 +892,7 @@ static int ceph_unlink(struct inode *dir, struct dentry *dentry)
892{ 892{
893 struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb); 893 struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb);
894 struct ceph_mds_client *mdsc = fsc->mdsc; 894 struct ceph_mds_client *mdsc = fsc->mdsc;
895 struct inode *inode = dentry->d_inode; 895 struct inode *inode = d_inode(dentry);
896 struct ceph_mds_request *req; 896 struct ceph_mds_request *req;
897 int err = -EROFS; 897 int err = -EROFS;
898 int op; 898 int op;
@@ -957,8 +957,8 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
957 req->r_dentry_unless = CEPH_CAP_FILE_EXCL; 957 req->r_dentry_unless = CEPH_CAP_FILE_EXCL;
958 /* release LINK_RDCACHE on source inode (mds will lock it) */ 958 /* release LINK_RDCACHE on source inode (mds will lock it) */
959 req->r_old_inode_drop = CEPH_CAP_LINK_SHARED; 959 req->r_old_inode_drop = CEPH_CAP_LINK_SHARED;
960 if (new_dentry->d_inode) 960 if (d_really_is_positive(new_dentry))
961 req->r_inode_drop = drop_caps_for_unlink(new_dentry->d_inode); 961 req->r_inode_drop = drop_caps_for_unlink(d_inode(new_dentry));
962 err = ceph_mdsc_do_request(mdsc, old_dir, req); 962 err = ceph_mdsc_do_request(mdsc, old_dir, req);
963 if (!err && !req->r_reply_info.head->is_dentry) { 963 if (!err && !req->r_reply_info.head->is_dentry) {
964 /* 964 /*
@@ -1024,7 +1024,7 @@ static int dentry_lease_is_valid(struct dentry *dentry)
1024 if (di->lease_renew_after && 1024 if (di->lease_renew_after &&
1025 time_after(jiffies, di->lease_renew_after)) { 1025 time_after(jiffies, di->lease_renew_after)) {
1026 /* we should renew */ 1026 /* we should renew */
1027 dir = dentry->d_parent->d_inode; 1027 dir = d_inode(dentry->d_parent);
1028 session = ceph_get_mds_session(s); 1028 session = ceph_get_mds_session(s);
1029 seq = di->lease_seq; 1029 seq = di->lease_seq;
1030 di->lease_renew_after = 0; 1030 di->lease_renew_after = 0;
@@ -1074,22 +1074,22 @@ static int ceph_d_revalidate(struct dentry *dentry, unsigned int flags)
1074 return -ECHILD; 1074 return -ECHILD;
1075 1075
1076 dout("d_revalidate %p '%pd' inode %p offset %lld\n", dentry, 1076 dout("d_revalidate %p '%pd' inode %p offset %lld\n", dentry,
1077 dentry, dentry->d_inode, ceph_dentry(dentry)->offset); 1077 dentry, d_inode(dentry), ceph_dentry(dentry)->offset);
1078 1078
1079 dir = ceph_get_dentry_parent_inode(dentry); 1079 dir = ceph_get_dentry_parent_inode(dentry);
1080 1080
1081 /* always trust cached snapped dentries, snapdir dentry */ 1081 /* always trust cached snapped dentries, snapdir dentry */
1082 if (ceph_snap(dir) != CEPH_NOSNAP) { 1082 if (ceph_snap(dir) != CEPH_NOSNAP) {
1083 dout("d_revalidate %p '%pd' inode %p is SNAPPED\n", dentry, 1083 dout("d_revalidate %p '%pd' inode %p is SNAPPED\n", dentry,
1084 dentry, dentry->d_inode); 1084 dentry, d_inode(dentry));
1085 valid = 1; 1085 valid = 1;
1086 } else if (dentry->d_inode && 1086 } else if (d_really_is_positive(dentry) &&
1087 ceph_snap(dentry->d_inode) == CEPH_SNAPDIR) { 1087 ceph_snap(d_inode(dentry)) == CEPH_SNAPDIR) {
1088 valid = 1; 1088 valid = 1;
1089 } else if (dentry_lease_is_valid(dentry) || 1089 } else if (dentry_lease_is_valid(dentry) ||
1090 dir_lease_is_valid(dir, dentry)) { 1090 dir_lease_is_valid(dir, dentry)) {
1091 if (dentry->d_inode) 1091 if (d_really_is_positive(dentry))
1092 valid = ceph_is_any_caps(dentry->d_inode); 1092 valid = ceph_is_any_caps(d_inode(dentry));
1093 else 1093 else
1094 valid = 1; 1094 valid = 1;
1095 } 1095 }
@@ -1151,7 +1151,7 @@ static void ceph_d_prune(struct dentry *dentry)
1151 * we hold d_lock, so d_parent is stable, and d_fsdata is never 1151 * we hold d_lock, so d_parent is stable, and d_fsdata is never
1152 * cleared until d_release 1152 * cleared until d_release
1153 */ 1153 */
1154 ceph_dir_clear_complete(dentry->d_parent->d_inode); 1154 ceph_dir_clear_complete(d_inode(dentry->d_parent));
1155} 1155}
1156 1156
1157/* 1157/*
diff --git a/fs/ceph/export.c b/fs/ceph/export.c
index 8d7d782f4382..fe02ae7f056a 100644
--- a/fs/ceph/export.c
+++ b/fs/ceph/export.c
@@ -136,8 +136,8 @@ static struct dentry *__get_parent(struct super_block *sb,
136 return ERR_CAST(req); 136 return ERR_CAST(req);
137 137
138 if (child) { 138 if (child) {
139 req->r_inode = child->d_inode; 139 req->r_inode = d_inode(child);
140 ihold(child->d_inode); 140 ihold(d_inode(child));
141 } else { 141 } else {
142 req->r_ino1 = (struct ceph_vino) { 142 req->r_ino1 = (struct ceph_vino) {
143 .ino = ino, 143 .ino = ino,
@@ -164,7 +164,7 @@ static struct dentry *__get_parent(struct super_block *sb,
164 return ERR_PTR(err); 164 return ERR_PTR(err);
165 } 165 }
166 dout("__get_parent ino %llx parent %p ino %llx.%llx\n", 166 dout("__get_parent ino %llx parent %p ino %llx.%llx\n",
167 child ? ceph_ino(child->d_inode) : ino, 167 child ? ceph_ino(d_inode(child)) : ino,
168 dentry, ceph_vinop(inode)); 168 dentry, ceph_vinop(inode));
169 return dentry; 169 return dentry;
170} 170}
@@ -172,11 +172,11 @@ static struct dentry *__get_parent(struct super_block *sb,
172static struct dentry *ceph_get_parent(struct dentry *child) 172static struct dentry *ceph_get_parent(struct dentry *child)
173{ 173{
174 /* don't re-export snaps */ 174 /* don't re-export snaps */
175 if (ceph_snap(child->d_inode) != CEPH_NOSNAP) 175 if (ceph_snap(d_inode(child)) != CEPH_NOSNAP)
176 return ERR_PTR(-EINVAL); 176 return ERR_PTR(-EINVAL);
177 177
178 dout("get_parent %p ino %llx.%llx\n", 178 dout("get_parent %p ino %llx.%llx\n",
179 child, ceph_vinop(child->d_inode)); 179 child, ceph_vinop(d_inode(child)));
180 return __get_parent(child->d_sb, child, 0); 180 return __get_parent(child->d_sb, child, 0);
181} 181}
182 182
@@ -209,32 +209,32 @@ static int ceph_get_name(struct dentry *parent, char *name,
209 struct ceph_mds_request *req; 209 struct ceph_mds_request *req;
210 int err; 210 int err;
211 211
212 mdsc = ceph_inode_to_client(child->d_inode)->mdsc; 212 mdsc = ceph_inode_to_client(d_inode(child))->mdsc;
213 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_LOOKUPNAME, 213 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_LOOKUPNAME,
214 USE_ANY_MDS); 214 USE_ANY_MDS);
215 if (IS_ERR(req)) 215 if (IS_ERR(req))
216 return PTR_ERR(req); 216 return PTR_ERR(req);
217 217
218 mutex_lock(&parent->d_inode->i_mutex); 218 mutex_lock(&d_inode(parent)->i_mutex);
219 219
220 req->r_inode = child->d_inode; 220 req->r_inode = d_inode(child);
221 ihold(child->d_inode); 221 ihold(d_inode(child));
222 req->r_ino2 = ceph_vino(parent->d_inode); 222 req->r_ino2 = ceph_vino(d_inode(parent));
223 req->r_locked_dir = parent->d_inode; 223 req->r_locked_dir = d_inode(parent);
224 req->r_num_caps = 2; 224 req->r_num_caps = 2;
225 err = ceph_mdsc_do_request(mdsc, NULL, req); 225 err = ceph_mdsc_do_request(mdsc, NULL, req);
226 226
227 mutex_unlock(&parent->d_inode->i_mutex); 227 mutex_unlock(&d_inode(parent)->i_mutex);
228 228
229 if (!err) { 229 if (!err) {
230 struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info; 230 struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info;
231 memcpy(name, rinfo->dname, rinfo->dname_len); 231 memcpy(name, rinfo->dname, rinfo->dname_len);
232 name[rinfo->dname_len] = 0; 232 name[rinfo->dname_len] = 0;
233 dout("get_name %p ino %llx.%llx name %s\n", 233 dout("get_name %p ino %llx.%llx name %s\n",
234 child, ceph_vinop(child->d_inode), name); 234 child, ceph_vinop(d_inode(child)), name);
235 } else { 235 } else {
236 dout("get_name %p ino %llx.%llx err %d\n", 236 dout("get_name %p ino %llx.%llx err %d\n",
237 child, ceph_vinop(child->d_inode), err); 237 child, ceph_vinop(d_inode(child)), err);
238 } 238 }
239 239
240 ceph_mdsc_put_request(req); 240 ceph_mdsc_put_request(req);
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index b9b8eb225f66..3b6b522b4b31 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -291,14 +291,14 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
291 } 291 }
292 if (err) 292 if (err)
293 goto out_req; 293 goto out_req;
294 if (dn || dentry->d_inode == NULL || d_is_symlink(dentry)) { 294 if (dn || d_really_is_negative(dentry) || d_is_symlink(dentry)) {
295 /* make vfs retry on splice, ENOENT, or symlink */ 295 /* make vfs retry on splice, ENOENT, or symlink */
296 dout("atomic_open finish_no_open on dn %p\n", dn); 296 dout("atomic_open finish_no_open on dn %p\n", dn);
297 err = finish_no_open(file, dn); 297 err = finish_no_open(file, dn);
298 } else { 298 } else {
299 dout("atomic_open finish_open on dn %p\n", dn); 299 dout("atomic_open finish_open on dn %p\n", dn);
300 if (req->r_op == CEPH_MDS_OP_CREATE && req->r_reply_info.has_create_ino) { 300 if (req->r_op == CEPH_MDS_OP_CREATE && req->r_reply_info.has_create_ino) {
301 ceph_init_inode_acls(dentry->d_inode, &acls); 301 ceph_init_inode_acls(d_inode(dentry), &acls);
302 *opened |= FILE_CREATED; 302 *opened |= FILE_CREATED;
303 } 303 }
304 err = finish_open(file, dentry, ceph_open, opened); 304 err = finish_open(file, dentry, ceph_open, opened);
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index 119c43c80638..e876e1944519 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -940,7 +940,7 @@ static void update_dentry_lease(struct dentry *dentry,
940 dentry, duration, ttl); 940 dentry, duration, ttl);
941 941
942 /* make lease_rdcache_gen match directory */ 942 /* make lease_rdcache_gen match directory */
943 dir = dentry->d_parent->d_inode; 943 dir = d_inode(dentry->d_parent);
944 di->lease_shared_gen = ceph_inode(dir)->i_shared_gen; 944 di->lease_shared_gen = ceph_inode(dir)->i_shared_gen;
945 945
946 if (duration == 0) 946 if (duration == 0)
@@ -980,7 +980,7 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,
980{ 980{
981 struct dentry *realdn; 981 struct dentry *realdn;
982 982
983 BUG_ON(dn->d_inode); 983 BUG_ON(d_inode(dn));
984 984
985 /* dn must be unhashed */ 985 /* dn must be unhashed */
986 if (!d_unhashed(dn)) 986 if (!d_unhashed(dn))
@@ -998,13 +998,13 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,
998 "inode %p ino %llx.%llx\n", 998 "inode %p ino %llx.%llx\n",
999 dn, d_count(dn), 999 dn, d_count(dn),
1000 realdn, d_count(realdn), 1000 realdn, d_count(realdn),
1001 realdn->d_inode, ceph_vinop(realdn->d_inode)); 1001 d_inode(realdn), ceph_vinop(d_inode(realdn)));
1002 dput(dn); 1002 dput(dn);
1003 dn = realdn; 1003 dn = realdn;
1004 } else { 1004 } else {
1005 BUG_ON(!ceph_dentry(dn)); 1005 BUG_ON(!ceph_dentry(dn));
1006 dout("dn %p attached to %p ino %llx.%llx\n", 1006 dout("dn %p attached to %p ino %llx.%llx\n",
1007 dn, dn->d_inode, ceph_vinop(dn->d_inode)); 1007 dn, d_inode(dn), ceph_vinop(d_inode(dn)));
1008 } 1008 }
1009 if ((!prehash || *prehash) && d_unhashed(dn)) 1009 if ((!prehash || *prehash) && d_unhashed(dn))
1010 d_rehash(dn); 1010 d_rehash(dn);
@@ -1125,11 +1125,11 @@ retry_lookup:
1125 dput(parent); 1125 dput(parent);
1126 goto done; 1126 goto done;
1127 } 1127 }
1128 } else if (dn->d_inode && 1128 } else if (d_really_is_positive(dn) &&
1129 (ceph_ino(dn->d_inode) != vino.ino || 1129 (ceph_ino(d_inode(dn)) != vino.ino ||
1130 ceph_snap(dn->d_inode) != vino.snap)) { 1130 ceph_snap(d_inode(dn)) != vino.snap)) {
1131 dout(" dn %p points to wrong inode %p\n", 1131 dout(" dn %p points to wrong inode %p\n",
1132 dn, dn->d_inode); 1132 dn, d_inode(dn));
1133 d_delete(dn); 1133 d_delete(dn);
1134 dput(dn); 1134 dput(dn);
1135 goto retry_lookup; 1135 goto retry_lookup;
@@ -1183,7 +1183,7 @@ retry_lookup:
1183 1183
1184 BUG_ON(!dn); 1184 BUG_ON(!dn);
1185 BUG_ON(!dir); 1185 BUG_ON(!dir);
1186 BUG_ON(dn->d_parent->d_inode != dir); 1186 BUG_ON(d_inode(dn->d_parent) != dir);
1187 BUG_ON(ceph_ino(dir) != 1187 BUG_ON(ceph_ino(dir) !=
1188 le64_to_cpu(rinfo->diri.in->ino)); 1188 le64_to_cpu(rinfo->diri.in->ino));
1189 BUG_ON(ceph_snap(dir) != 1189 BUG_ON(ceph_snap(dir) !=
@@ -1235,7 +1235,7 @@ retry_lookup:
1235 /* null dentry? */ 1235 /* null dentry? */
1236 if (!rinfo->head->is_target) { 1236 if (!rinfo->head->is_target) {
1237 dout("fill_trace null dentry\n"); 1237 dout("fill_trace null dentry\n");
1238 if (dn->d_inode) { 1238 if (d_really_is_positive(dn)) {
1239 ceph_dir_clear_ordered(dir); 1239 ceph_dir_clear_ordered(dir);
1240 dout("d_delete %p\n", dn); 1240 dout("d_delete %p\n", dn);
1241 d_delete(dn); 1241 d_delete(dn);
@@ -1252,7 +1252,7 @@ retry_lookup:
1252 } 1252 }
1253 1253
1254 /* attach proper inode */ 1254 /* attach proper inode */
1255 if (!dn->d_inode) { 1255 if (d_really_is_negative(dn)) {
1256 ceph_dir_clear_ordered(dir); 1256 ceph_dir_clear_ordered(dir);
1257 ihold(in); 1257 ihold(in);
1258 dn = splice_dentry(dn, in, &have_lease); 1258 dn = splice_dentry(dn, in, &have_lease);
@@ -1261,9 +1261,9 @@ retry_lookup:
1261 goto done; 1261 goto done;
1262 } 1262 }
1263 req->r_dentry = dn; /* may have spliced */ 1263 req->r_dentry = dn; /* may have spliced */
1264 } else if (dn->d_inode && dn->d_inode != in) { 1264 } else if (d_really_is_positive(dn) && d_inode(dn) != in) {
1265 dout(" %p links to %p %llx.%llx, not %llx.%llx\n", 1265 dout(" %p links to %p %llx.%llx, not %llx.%llx\n",
1266 dn, dn->d_inode, ceph_vinop(dn->d_inode), 1266 dn, d_inode(dn), ceph_vinop(d_inode(dn)),
1267 ceph_vinop(in)); 1267 ceph_vinop(in));
1268 have_lease = false; 1268 have_lease = false;
1269 } 1269 }
@@ -1363,7 +1363,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
1363 return readdir_prepopulate_inodes_only(req, session); 1363 return readdir_prepopulate_inodes_only(req, session);
1364 1364
1365 if (le32_to_cpu(rinfo->head->op) == CEPH_MDS_OP_LSSNAP) { 1365 if (le32_to_cpu(rinfo->head->op) == CEPH_MDS_OP_LSSNAP) {
1366 snapdir = ceph_get_snapdir(parent->d_inode); 1366 snapdir = ceph_get_snapdir(d_inode(parent));
1367 parent = d_find_alias(snapdir); 1367 parent = d_find_alias(snapdir);
1368 dout("readdir_prepopulate %d items under SNAPDIR dn %p\n", 1368 dout("readdir_prepopulate %d items under SNAPDIR dn %p\n",
1369 rinfo->dir_nr, parent); 1369 rinfo->dir_nr, parent);
@@ -1371,7 +1371,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
1371 dout("readdir_prepopulate %d items under dn %p\n", 1371 dout("readdir_prepopulate %d items under dn %p\n",
1372 rinfo->dir_nr, parent); 1372 rinfo->dir_nr, parent);
1373 if (rinfo->dir_dir) 1373 if (rinfo->dir_dir)
1374 ceph_fill_dirfrag(parent->d_inode, rinfo->dir_dir); 1374 ceph_fill_dirfrag(d_inode(parent), rinfo->dir_dir);
1375 } 1375 }
1376 1376
1377 /* FIXME: release caps/leases if error occurs */ 1377 /* FIXME: release caps/leases if error occurs */
@@ -1405,11 +1405,11 @@ retry_lookup:
1405 err = ret; 1405 err = ret;
1406 goto out; 1406 goto out;
1407 } 1407 }
1408 } else if (dn->d_inode && 1408 } else if (d_really_is_positive(dn) &&
1409 (ceph_ino(dn->d_inode) != vino.ino || 1409 (ceph_ino(d_inode(dn)) != vino.ino ||
1410 ceph_snap(dn->d_inode) != vino.snap)) { 1410 ceph_snap(d_inode(dn)) != vino.snap)) {
1411 dout(" dn %p points to wrong inode %p\n", 1411 dout(" dn %p points to wrong inode %p\n",
1412 dn, dn->d_inode); 1412 dn, d_inode(dn));
1413 d_delete(dn); 1413 d_delete(dn);
1414 dput(dn); 1414 dput(dn);
1415 goto retry_lookup; 1415 goto retry_lookup;
@@ -1423,8 +1423,8 @@ retry_lookup:
1423 } 1423 }
1424 1424
1425 /* inode */ 1425 /* inode */
1426 if (dn->d_inode) { 1426 if (d_really_is_positive(dn)) {
1427 in = dn->d_inode; 1427 in = d_inode(dn);
1428 } else { 1428 } else {
1429 in = ceph_get_inode(parent->d_sb, vino); 1429 in = ceph_get_inode(parent->d_sb, vino);
1430 if (IS_ERR(in)) { 1430 if (IS_ERR(in)) {
@@ -1440,13 +1440,13 @@ retry_lookup:
1440 req->r_request_started, -1, 1440 req->r_request_started, -1,
1441 &req->r_caps_reservation) < 0) { 1441 &req->r_caps_reservation) < 0) {
1442 pr_err("fill_inode badness on %p\n", in); 1442 pr_err("fill_inode badness on %p\n", in);
1443 if (!dn->d_inode) 1443 if (d_really_is_negative(dn))
1444 iput(in); 1444 iput(in);
1445 d_drop(dn); 1445 d_drop(dn);
1446 goto next_item; 1446 goto next_item;
1447 } 1447 }
1448 1448
1449 if (!dn->d_inode) { 1449 if (d_really_is_negative(dn)) {
1450 struct dentry *realdn = splice_dentry(dn, in, NULL); 1450 struct dentry *realdn = splice_dentry(dn, in, NULL);
1451 if (IS_ERR(realdn)) { 1451 if (IS_ERR(realdn)) {
1452 err = PTR_ERR(realdn); 1452 err = PTR_ERR(realdn);
@@ -1693,7 +1693,7 @@ retry:
1693 */ 1693 */
1694static void *ceph_sym_follow_link(struct dentry *dentry, struct nameidata *nd) 1694static void *ceph_sym_follow_link(struct dentry *dentry, struct nameidata *nd)
1695{ 1695{
1696 struct ceph_inode_info *ci = ceph_inode(dentry->d_inode); 1696 struct ceph_inode_info *ci = ceph_inode(d_inode(dentry));
1697 nd_set_link(nd, ci->i_symlink); 1697 nd_set_link(nd, ci->i_symlink);
1698 return NULL; 1698 return NULL;
1699} 1699}
@@ -1714,7 +1714,7 @@ static const struct inode_operations ceph_symlink_iops = {
1714 */ 1714 */
1715int ceph_setattr(struct dentry *dentry, struct iattr *attr) 1715int ceph_setattr(struct dentry *dentry, struct iattr *attr)
1716{ 1716{
1717 struct inode *inode = dentry->d_inode; 1717 struct inode *inode = d_inode(dentry);
1718 struct ceph_inode_info *ci = ceph_inode(inode); 1718 struct ceph_inode_info *ci = ceph_inode(inode);
1719 const unsigned int ia_valid = attr->ia_valid; 1719 const unsigned int ia_valid = attr->ia_valid;
1720 struct ceph_mds_request *req; 1720 struct ceph_mds_request *req;
@@ -1990,7 +1990,7 @@ int ceph_permission(struct inode *inode, int mask)
1990int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry, 1990int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry,
1991 struct kstat *stat) 1991 struct kstat *stat)
1992{ 1992{
1993 struct inode *inode = dentry->d_inode; 1993 struct inode *inode = d_inode(dentry);
1994 struct ceph_inode_info *ci = ceph_inode(inode); 1994 struct ceph_inode_info *ci = ceph_inode(inode);
1995 int err; 1995 int err;
1996 1996
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 71c073f38e54..a39389092102 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -679,7 +679,7 @@ static struct dentry *get_nonsnap_parent(struct dentry *dentry)
679 * except to resplice to another snapdir, and either the old or new 679 * except to resplice to another snapdir, and either the old or new
680 * result is a valid result. 680 * result is a valid result.
681 */ 681 */
682 while (!IS_ROOT(dentry) && ceph_snap(dentry->d_inode) != CEPH_NOSNAP) 682 while (!IS_ROOT(dentry) && ceph_snap(d_inode(dentry)) != CEPH_NOSNAP)
683 dentry = dentry->d_parent; 683 dentry = dentry->d_parent;
684 return dentry; 684 return dentry;
685} 685}
@@ -716,20 +716,20 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
716 } else if (req->r_dentry) { 716 } else if (req->r_dentry) {
717 /* ignore race with rename; old or new d_parent is okay */ 717 /* ignore race with rename; old or new d_parent is okay */
718 struct dentry *parent = req->r_dentry->d_parent; 718 struct dentry *parent = req->r_dentry->d_parent;
719 struct inode *dir = parent->d_inode; 719 struct inode *dir = d_inode(parent);
720 720
721 if (dir->i_sb != mdsc->fsc->sb) { 721 if (dir->i_sb != mdsc->fsc->sb) {
722 /* not this fs! */ 722 /* not this fs! */
723 inode = req->r_dentry->d_inode; 723 inode = d_inode(req->r_dentry);
724 } else if (ceph_snap(dir) != CEPH_NOSNAP) { 724 } else if (ceph_snap(dir) != CEPH_NOSNAP) {
725 /* direct snapped/virtual snapdir requests 725 /* direct snapped/virtual snapdir requests
726 * based on parent dir inode */ 726 * based on parent dir inode */
727 struct dentry *dn = get_nonsnap_parent(parent); 727 struct dentry *dn = get_nonsnap_parent(parent);
728 inode = dn->d_inode; 728 inode = d_inode(dn);
729 dout("__choose_mds using nonsnap parent %p\n", inode); 729 dout("__choose_mds using nonsnap parent %p\n", inode);
730 } else { 730 } else {
731 /* dentry target */ 731 /* dentry target */
732 inode = req->r_dentry->d_inode; 732 inode = d_inode(req->r_dentry);
733 if (!inode || mode == USE_AUTH_MDS) { 733 if (!inode || mode == USE_AUTH_MDS) {
734 /* dir + name */ 734 /* dir + name */
735 inode = dir; 735 inode = dir;
@@ -1712,7 +1712,7 @@ retry:
1712 seq = read_seqbegin(&rename_lock); 1712 seq = read_seqbegin(&rename_lock);
1713 rcu_read_lock(); 1713 rcu_read_lock();
1714 for (temp = dentry; !IS_ROOT(temp);) { 1714 for (temp = dentry; !IS_ROOT(temp);) {
1715 struct inode *inode = temp->d_inode; 1715 struct inode *inode = d_inode(temp);
1716 if (inode && ceph_snap(inode) == CEPH_SNAPDIR) 1716 if (inode && ceph_snap(inode) == CEPH_SNAPDIR)
1717 len++; /* slash only */ 1717 len++; /* slash only */
1718 else if (stop_on_nosnap && inode && 1718 else if (stop_on_nosnap && inode &&
@@ -1736,7 +1736,7 @@ retry:
1736 struct inode *inode; 1736 struct inode *inode;
1737 1737
1738 spin_lock(&temp->d_lock); 1738 spin_lock(&temp->d_lock);
1739 inode = temp->d_inode; 1739 inode = d_inode(temp);
1740 if (inode && ceph_snap(inode) == CEPH_SNAPDIR) { 1740 if (inode && ceph_snap(inode) == CEPH_SNAPDIR) {
1741 dout("build_path path+%d: %p SNAPDIR\n", 1741 dout("build_path path+%d: %p SNAPDIR\n",
1742 pos, temp); 1742 pos, temp);
@@ -1770,7 +1770,7 @@ retry:
1770 goto retry; 1770 goto retry;
1771 } 1771 }
1772 1772
1773 *base = ceph_ino(temp->d_inode); 1773 *base = ceph_ino(d_inode(temp));
1774 *plen = len; 1774 *plen = len;
1775 dout("build_path on %p %d built %llx '%.*s'\n", 1775 dout("build_path on %p %d built %llx '%.*s'\n",
1776 dentry, d_count(dentry), *base, len, path); 1776 dentry, d_count(dentry), *base, len, path);
@@ -1783,8 +1783,8 @@ static int build_dentry_path(struct dentry *dentry,
1783{ 1783{
1784 char *path; 1784 char *path;
1785 1785
1786 if (ceph_snap(dentry->d_parent->d_inode) == CEPH_NOSNAP) { 1786 if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_NOSNAP) {
1787 *pino = ceph_ino(dentry->d_parent->d_inode); 1787 *pino = ceph_ino(d_inode(dentry->d_parent));
1788 *ppath = dentry->d_name.name; 1788 *ppath = dentry->d_name.name;
1789 *ppathlen = dentry->d_name.len; 1789 *ppathlen = dentry->d_name.len;
1790 return 0; 1790 return 0;
@@ -1925,7 +1925,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
1925 releases = 0; 1925 releases = 0;
1926 if (req->r_inode_drop) 1926 if (req->r_inode_drop)
1927 releases += ceph_encode_inode_release(&p, 1927 releases += ceph_encode_inode_release(&p,
1928 req->r_inode ? req->r_inode : req->r_dentry->d_inode, 1928 req->r_inode ? req->r_inode : d_inode(req->r_dentry),
1929 mds, req->r_inode_drop, req->r_inode_unless, 0); 1929 mds, req->r_inode_drop, req->r_inode_unless, 0);
1930 if (req->r_dentry_drop) 1930 if (req->r_dentry_drop)
1931 releases += ceph_encode_dentry_release(&p, req->r_dentry, 1931 releases += ceph_encode_dentry_release(&p, req->r_dentry,
@@ -1935,7 +1935,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
1935 mds, req->r_old_dentry_drop, req->r_old_dentry_unless); 1935 mds, req->r_old_dentry_drop, req->r_old_dentry_unless);
1936 if (req->r_old_inode_drop) 1936 if (req->r_old_inode_drop)
1937 releases += ceph_encode_inode_release(&p, 1937 releases += ceph_encode_inode_release(&p,
1938 req->r_old_dentry->d_inode, 1938 d_inode(req->r_old_dentry),
1939 mds, req->r_old_inode_drop, req->r_old_inode_unless, 0); 1939 mds, req->r_old_inode_drop, req->r_old_inode_unless, 0);
1940 head->num_releases = cpu_to_le16(releases); 1940 head->num_releases = cpu_to_le16(releases);
1941 1941
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index a63997b8bcff..e68591df9942 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -44,7 +44,7 @@ static void ceph_put_super(struct super_block *s)
44 44
45static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) 45static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
46{ 46{
47 struct ceph_fs_client *fsc = ceph_inode_to_client(dentry->d_inode); 47 struct ceph_fs_client *fsc = ceph_inode_to_client(d_inode(dentry));
48 struct ceph_monmap *monmap = fsc->client->monc.monmap; 48 struct ceph_monmap *monmap = fsc->client->monc.monmap;
49 struct ceph_statfs st; 49 struct ceph_statfs st;
50 u64 fsid; 50 u64 fsid;
@@ -976,7 +976,7 @@ static struct dentry *ceph_mount(struct file_system_type *fs_type,
976 if (IS_ERR(res)) 976 if (IS_ERR(res))
977 goto out_splat; 977 goto out_splat;
978 dout("root %p inode %p ino %llx.%llx\n", res, 978 dout("root %p inode %p ino %llx.%llx\n", res,
979 res->d_inode, ceph_vinop(res->d_inode)); 979 d_inode(res), ceph_vinop(d_inode(res)));
980 return res; 980 return res;
981 981
982out_splat: 982out_splat:
diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
index 5a492caf34cb..e448766ce549 100644
--- a/fs/ceph/xattr.c
+++ b/fs/ceph/xattr.c
@@ -776,12 +776,12 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value,
776 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) 776 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
777 return generic_getxattr(dentry, name, value, size); 777 return generic_getxattr(dentry, name, value, size);
778 778
779 return __ceph_getxattr(dentry->d_inode, name, value, size); 779 return __ceph_getxattr(d_inode(dentry), name, value, size);
780} 780}
781 781
782ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size) 782ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size)
783{ 783{
784 struct inode *inode = dentry->d_inode; 784 struct inode *inode = d_inode(dentry);
785 struct ceph_inode_info *ci = ceph_inode(inode); 785 struct ceph_inode_info *ci = ceph_inode(inode);
786 struct ceph_vxattr *vxattrs = ceph_inode_vxattrs(inode); 786 struct ceph_vxattr *vxattrs = ceph_inode_vxattrs(inode);
787 u32 vir_namelen = 0; 787 u32 vir_namelen = 0;
@@ -847,7 +847,7 @@ static int ceph_sync_setxattr(struct dentry *dentry, const char *name,
847 const char *value, size_t size, int flags) 847 const char *value, size_t size, int flags)
848{ 848{
849 struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb); 849 struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
850 struct inode *inode = dentry->d_inode; 850 struct inode *inode = d_inode(dentry);
851 struct ceph_inode_info *ci = ceph_inode(inode); 851 struct ceph_inode_info *ci = ceph_inode(inode);
852 struct ceph_mds_request *req; 852 struct ceph_mds_request *req;
853 struct ceph_mds_client *mdsc = fsc->mdsc; 853 struct ceph_mds_client *mdsc = fsc->mdsc;
@@ -901,7 +901,7 @@ out:
901int __ceph_setxattr(struct dentry *dentry, const char *name, 901int __ceph_setxattr(struct dentry *dentry, const char *name,
902 const void *value, size_t size, int flags) 902 const void *value, size_t size, int flags)
903{ 903{
904 struct inode *inode = dentry->d_inode; 904 struct inode *inode = d_inode(dentry);
905 struct ceph_vxattr *vxattr; 905 struct ceph_vxattr *vxattr;
906 struct ceph_inode_info *ci = ceph_inode(inode); 906 struct ceph_inode_info *ci = ceph_inode(inode);
907 int issued; 907 int issued;
@@ -995,7 +995,7 @@ out:
995int ceph_setxattr(struct dentry *dentry, const char *name, 995int ceph_setxattr(struct dentry *dentry, const char *name,
996 const void *value, size_t size, int flags) 996 const void *value, size_t size, int flags)
997{ 997{
998 if (ceph_snap(dentry->d_inode) != CEPH_NOSNAP) 998 if (ceph_snap(d_inode(dentry)) != CEPH_NOSNAP)
999 return -EROFS; 999 return -EROFS;
1000 1000
1001 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) 1001 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
@@ -1011,7 +1011,7 @@ static int ceph_send_removexattr(struct dentry *dentry, const char *name)
1011{ 1011{
1012 struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb); 1012 struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
1013 struct ceph_mds_client *mdsc = fsc->mdsc; 1013 struct ceph_mds_client *mdsc = fsc->mdsc;
1014 struct inode *inode = dentry->d_inode; 1014 struct inode *inode = d_inode(dentry);
1015 struct ceph_mds_request *req; 1015 struct ceph_mds_request *req;
1016 int err; 1016 int err;
1017 1017
@@ -1032,7 +1032,7 @@ static int ceph_send_removexattr(struct dentry *dentry, const char *name)
1032 1032
1033int __ceph_removexattr(struct dentry *dentry, const char *name) 1033int __ceph_removexattr(struct dentry *dentry, const char *name)
1034{ 1034{
1035 struct inode *inode = dentry->d_inode; 1035 struct inode *inode = d_inode(dentry);
1036 struct ceph_vxattr *vxattr; 1036 struct ceph_vxattr *vxattr;
1037 struct ceph_inode_info *ci = ceph_inode(inode); 1037 struct ceph_inode_info *ci = ceph_inode(inode);
1038 int issued; 1038 int issued;
@@ -1098,7 +1098,7 @@ out:
1098 1098
1099int ceph_removexattr(struct dentry *dentry, const char *name) 1099int ceph_removexattr(struct dentry *dentry, const char *name)
1100{ 1100{
1101 if (ceph_snap(dentry->d_inode) != CEPH_NOSNAP) 1101 if (ceph_snap(d_inode(dentry)) != CEPH_NOSNAP)
1102 return -EROFS; 1102 return -EROFS;
1103 1103
1104 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) 1104 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))