diff options
| -rw-r--r-- | fs/ceph/inode.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 9fff9f3b17e4..4b5762ef7c2b 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c | |||
| @@ -992,11 +992,15 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req, | |||
| 992 | if (rinfo->head->is_dentry) { | 992 | if (rinfo->head->is_dentry) { |
| 993 | struct inode *dir = req->r_locked_dir; | 993 | struct inode *dir = req->r_locked_dir; |
| 994 | 994 | ||
| 995 | err = fill_inode(dir, &rinfo->diri, rinfo->dirfrag, | 995 | if (dir) { |
| 996 | session, req->r_request_started, -1, | 996 | err = fill_inode(dir, &rinfo->diri, rinfo->dirfrag, |
| 997 | &req->r_caps_reservation); | 997 | session, req->r_request_started, -1, |
| 998 | if (err < 0) | 998 | &req->r_caps_reservation); |
| 999 | return err; | 999 | if (err < 0) |
| 1000 | return err; | ||
| 1001 | } else { | ||
| 1002 | WARN_ON_ONCE(1); | ||
| 1003 | } | ||
| 1000 | } | 1004 | } |
| 1001 | 1005 | ||
| 1002 | /* | 1006 | /* |
| @@ -1004,6 +1008,7 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req, | |||
| 1004 | * will have trouble splicing in the virtual snapdir later | 1008 | * will have trouble splicing in the virtual snapdir later |
| 1005 | */ | 1009 | */ |
| 1006 | if (rinfo->head->is_dentry && !req->r_aborted && | 1010 | if (rinfo->head->is_dentry && !req->r_aborted && |
| 1011 | req->r_locked_dir && | ||
| 1007 | (rinfo->head->is_target || strncmp(req->r_dentry->d_name.name, | 1012 | (rinfo->head->is_target || strncmp(req->r_dentry->d_name.name, |
| 1008 | fsc->mount_options->snapdir_name, | 1013 | fsc->mount_options->snapdir_name, |
| 1009 | req->r_dentry->d_name.len))) { | 1014 | req->r_dentry->d_name.len))) { |
