diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-28 17:07:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-28 17:07:20 -0400 |
commit | 997396a73a94de7d92d82e30d7bb1d931e38cb16 (patch) | |
tree | 2190a66e085f16a1985e008be167d6fc4ea6734d /fs/ceph/inode.c | |
parent | 6f4dbeca1a5bac4552d49d9e7b774da9f6625e74 (diff) | |
parent | b545787dbb00a041c541a4759d938ddb0108295a (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
ceph: fix get_ticket_handler() error handling
ceph: don't BUG on ENOMEM during mds reconnect
ceph: ceph_mdsc_build_path() returns an ERR_PTR
ceph: Fix warnings
ceph: ceph_get_inode() returns an ERR_PTR
ceph: initialize fields on new dentry_infos
ceph: maintain i_head_snapc when any caps are dirty, not just for data
ceph: fix osd request lru adjustment when sending request
ceph: don't improperly set dir complete when holding EXCL cap
mm: exporting account_page_dirty
ceph: direct requests in snapped namespace based on nonsnap parent
ceph: queue cap snap writeback for realm children on snap update
ceph: include dirty xattrs state in snapped caps
ceph: fix xattr cap writeback
ceph: fix multiple mds session shutdown
Diffstat (limited to 'fs/ceph/inode.c')
-rw-r--r-- | fs/ceph/inode.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 5d893d31e399..e7cca414da03 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c | |||
@@ -677,6 +677,7 @@ static int fill_inode(struct inode *inode, | |||
677 | if (ci->i_files == 0 && ci->i_subdirs == 0 && | 677 | if (ci->i_files == 0 && ci->i_subdirs == 0 && |
678 | ceph_snap(inode) == CEPH_NOSNAP && | 678 | ceph_snap(inode) == CEPH_NOSNAP && |
679 | (le32_to_cpu(info->cap.caps) & CEPH_CAP_FILE_SHARED) && | 679 | (le32_to_cpu(info->cap.caps) & CEPH_CAP_FILE_SHARED) && |
680 | (issued & CEPH_CAP_FILE_EXCL) == 0 && | ||
680 | (ci->i_ceph_flags & CEPH_I_COMPLETE) == 0) { | 681 | (ci->i_ceph_flags & CEPH_I_COMPLETE) == 0) { |
681 | dout(" marking %p complete (empty)\n", inode); | 682 | dout(" marking %p complete (empty)\n", inode); |
682 | ci->i_ceph_flags |= CEPH_I_COMPLETE; | 683 | ci->i_ceph_flags |= CEPH_I_COMPLETE; |
@@ -1229,11 +1230,11 @@ retry_lookup: | |||
1229 | in = dn->d_inode; | 1230 | in = dn->d_inode; |
1230 | } else { | 1231 | } else { |
1231 | in = ceph_get_inode(parent->d_sb, vino); | 1232 | in = ceph_get_inode(parent->d_sb, vino); |
1232 | if (in == NULL) { | 1233 | if (IS_ERR(in)) { |
1233 | dout("new_inode badness\n"); | 1234 | dout("new_inode badness\n"); |
1234 | d_delete(dn); | 1235 | d_delete(dn); |
1235 | dput(dn); | 1236 | dput(dn); |
1236 | err = -ENOMEM; | 1237 | err = PTR_ERR(in); |
1237 | goto out; | 1238 | goto out; |
1238 | } | 1239 | } |
1239 | dn = splice_dentry(dn, in, NULL); | 1240 | dn = splice_dentry(dn, in, NULL); |