Commit 7e567b44 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2

* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2:
  ocfs2: Change repository in MAINTAINERS.
  ocfs2: Fix a missing credit when deleting from indexed directories.
  ocfs2/trivial: Remove unused variable in ocfs2_rename.
  ocfs2: Add missing iput() during error handling in ocfs2_dentry_attach_lock()
  ocfs2: Fix some printk() warnings.
  ocfs2: Fix 2 warning during ocfs2 make.
  ocfs2: Reserve 1 more cluster in expanding_inline_dir for indexed dir.
parents 020f932b 2191aeba
...@@ -4189,7 +4189,7 @@ P: Joel Becker ...@@ -4189,7 +4189,7 @@ P: Joel Becker
M: joel.becker@oracle.com M: joel.becker@oracle.com
L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers) L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
W: http://oss.oracle.com/projects/ocfs2/ W: http://oss.oracle.com/projects/ocfs2/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git
S: Supported S: Supported
F: Documentation/filesystems/ocfs2.txt F: Documentation/filesystems/ocfs2.txt
F: Documentation/filesystems/dlmfs.txt F: Documentation/filesystems/dlmfs.txt
......
...@@ -290,6 +290,21 @@ out_attach: ...@@ -290,6 +290,21 @@ out_attach:
else else
mlog_errno(ret); mlog_errno(ret);
/*
* In case of error, manually free the allocation and do the iput().
* We need to do this because error here means no d_instantiate(),
* which means iput() will not be called during dput(dentry).
*/
if (ret < 0 && !alias) {
ocfs2_lock_res_free(&dl->dl_lockres);
BUG_ON(dl->dl_count != 1);
spin_lock(&dentry_attach_lock);
dentry->d_fsdata = NULL;
spin_unlock(&dentry_attach_lock);
kfree(dl);
iput(inode);
}
dput(alias); dput(alias);
return ret; return ret;
......
...@@ -2697,7 +2697,7 @@ static int ocfs2_dx_dir_index_block(struct inode *dir, ...@@ -2697,7 +2697,7 @@ static int ocfs2_dx_dir_index_block(struct inode *dir,
u32 *num_dx_entries, u32 *num_dx_entries,
struct buffer_head *dirent_bh) struct buffer_head *dirent_bh)
{ {
int ret, namelen, i; int ret = 0, namelen, i;
char *de_buf, *limit; char *de_buf, *limit;
struct ocfs2_dir_entry *de; struct ocfs2_dir_entry *de;
struct buffer_head *dx_leaf_bh; struct buffer_head *dx_leaf_bh;
...@@ -2934,7 +2934,7 @@ static int ocfs2_expand_inline_dir(struct inode *dir, struct buffer_head *di_bh, ...@@ -2934,7 +2934,7 @@ static int ocfs2_expand_inline_dir(struct inode *dir, struct buffer_head *di_bh,
*/ */
BUG_ON(alloc > 2); BUG_ON(alloc > 2);
ret = ocfs2_reserve_clusters(osb, alloc, &data_ac); ret = ocfs2_reserve_clusters(osb, alloc + dx_alloc, &data_ac);
if (ret) { if (ret) {
mlog_errno(ret); mlog_errno(ret);
goto out; goto out;
......
...@@ -100,7 +100,8 @@ static struct dentry *ocfs2_get_dentry(struct super_block *sb, ...@@ -100,7 +100,8 @@ static struct dentry *ocfs2_get_dentry(struct super_block *sb,
/* If the inode allocator bit is clear, this inode must be stale */ /* If the inode allocator bit is clear, this inode must be stale */
if (!set) { if (!set) {
mlog(0, "inode %llu suballoc bit is clear\n", blkno); mlog(0, "inode %llu suballoc bit is clear\n",
(unsigned long long)blkno);
status = -ESTALE; status = -ESTALE;
goto unlock_nfs_sync; goto unlock_nfs_sync;
} }
...@@ -114,7 +115,7 @@ check_err: ...@@ -114,7 +115,7 @@ check_err:
if (status < 0) { if (status < 0) {
if (status == -ESTALE) { if (status == -ESTALE) {
mlog(0, "stale inode ino: %llu generation: %u\n", mlog(0, "stale inode ino: %llu generation: %u\n",
blkno, handle->ih_generation); (unsigned long long)blkno, handle->ih_generation);
} }
result = ERR_PTR(status); result = ERR_PTR(status);
goto bail; goto bail;
...@@ -129,8 +130,8 @@ check_err: ...@@ -129,8 +130,8 @@ check_err:
check_gen: check_gen:
if (handle->ih_generation != inode->i_generation) { if (handle->ih_generation != inode->i_generation) {
iput(inode); iput(inode);
mlog(0, "stale inode ino: %llu generation: %u\n", blkno, mlog(0, "stale inode ino: %llu generation: %u\n",
handle->ih_generation); (unsigned long long)blkno, handle->ih_generation);
result = ERR_PTR(-ESTALE); result = ERR_PTR(-ESTALE);
goto bail; goto bail;
} }
......
...@@ -437,8 +437,9 @@ static inline int ocfs2_unlink_credits(struct super_block *sb) ...@@ -437,8 +437,9 @@ static inline int ocfs2_unlink_credits(struct super_block *sb)
} }
/* dinode + orphan dir dinode + inode alloc dinode + orphan dir entry + /* dinode + orphan dir dinode + inode alloc dinode + orphan dir entry +
* inode alloc group descriptor + orphan dir index leaf */ * inode alloc group descriptor + orphan dir index root +
#define OCFS2_DELETE_INODE_CREDITS (3 * OCFS2_INODE_UPDATE_CREDITS + 3) * orphan dir index leaf */
#define OCFS2_DELETE_INODE_CREDITS (3 * OCFS2_INODE_UPDATE_CREDITS + 4)
/* dinode update, old dir dinode update, new dir dinode update, old /* dinode update, old dir dinode update, new dir dinode update, old
* dir dir entry, new dir dir entry, dir entry update for renaming * dir dir entry, new dir dir entry, dir entry update for renaming
......
...@@ -1025,10 +1025,8 @@ static int ocfs2_rename(struct inode *old_dir, ...@@ -1025,10 +1025,8 @@ static int ocfs2_rename(struct inode *old_dir,
struct inode *orphan_dir = NULL; struct inode *orphan_dir = NULL;
struct ocfs2_dinode *newfe = NULL; struct ocfs2_dinode *newfe = NULL;
char orphan_name[OCFS2_ORPHAN_NAMELEN + 1]; char orphan_name[OCFS2_ORPHAN_NAMELEN + 1];
struct buffer_head *orphan_entry_bh = NULL;
struct buffer_head *newfe_bh = NULL; struct buffer_head *newfe_bh = NULL;
struct buffer_head *old_inode_bh = NULL; struct buffer_head *old_inode_bh = NULL;
struct buffer_head *insert_entry_bh = NULL;
struct ocfs2_super *osb = NULL; struct ocfs2_super *osb = NULL;
u64 newfe_blkno, old_de_ino; u64 newfe_blkno, old_de_ino;
handle_t *handle = NULL; handle_t *handle = NULL;
...@@ -1455,8 +1453,6 @@ bail: ...@@ -1455,8 +1453,6 @@ bail:
brelse(old_inode_bh); brelse(old_inode_bh);
brelse(old_dir_bh); brelse(old_dir_bh);
brelse(new_dir_bh); brelse(new_dir_bh);
brelse(orphan_entry_bh);
brelse(insert_entry_bh);
mlog_exit(status); mlog_exit(status);
......
...@@ -2197,26 +2197,29 @@ static int ocfs2_get_suballoc_slot_bit(struct ocfs2_super *osb, u64 blkno, ...@@ -2197,26 +2197,29 @@ static int ocfs2_get_suballoc_slot_bit(struct ocfs2_super *osb, u64 blkno,
struct buffer_head *inode_bh = NULL; struct buffer_head *inode_bh = NULL;
struct ocfs2_dinode *inode_fe; struct ocfs2_dinode *inode_fe;
mlog_entry("blkno: %llu\n", blkno); mlog_entry("blkno: %llu\n", (unsigned long long)blkno);
/* dirty read disk */ /* dirty read disk */
status = ocfs2_read_blocks_sync(osb, blkno, 1, &inode_bh); status = ocfs2_read_blocks_sync(osb, blkno, 1, &inode_bh);
if (status < 0) { if (status < 0) {
mlog(ML_ERROR, "read block %llu failed %d\n", blkno, status); mlog(ML_ERROR, "read block %llu failed %d\n",
(unsigned long long)blkno, status);
goto bail; goto bail;
} }
inode_fe = (struct ocfs2_dinode *) inode_bh->b_data; inode_fe = (struct ocfs2_dinode *) inode_bh->b_data;
if (!OCFS2_IS_VALID_DINODE(inode_fe)) { if (!OCFS2_IS_VALID_DINODE(inode_fe)) {
mlog(ML_ERROR, "invalid inode %llu requested\n", blkno); mlog(ML_ERROR, "invalid inode %llu requested\n",
(unsigned long long)blkno);
status = -EINVAL; status = -EINVAL;
goto bail; goto bail;
} }
if (le16_to_cpu(inode_fe->i_suballoc_slot) != OCFS2_INVALID_SLOT && if (le16_to_cpu(inode_fe->i_suballoc_slot) != (u16)OCFS2_INVALID_SLOT &&
(u32)le16_to_cpu(inode_fe->i_suballoc_slot) > osb->max_slots - 1) { (u32)le16_to_cpu(inode_fe->i_suballoc_slot) > osb->max_slots - 1) {
mlog(ML_ERROR, "inode %llu has invalid suballoc slot %u\n", mlog(ML_ERROR, "inode %llu has invalid suballoc slot %u\n",
blkno, (u32)le16_to_cpu(inode_fe->i_suballoc_slot)); (unsigned long long)blkno,
(u32)le16_to_cpu(inode_fe->i_suballoc_slot));
status = -EINVAL; status = -EINVAL;
goto bail; goto bail;
} }
...@@ -2251,7 +2254,8 @@ static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb, ...@@ -2251,7 +2254,8 @@ static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb,
u64 bg_blkno; u64 bg_blkno;
int status; int status;
mlog_entry("blkno: %llu bit: %u\n", blkno, (unsigned int)bit); mlog_entry("blkno: %llu bit: %u\n", (unsigned long long)blkno,
(unsigned int)bit);
alloc_fe = (struct ocfs2_dinode *)alloc_bh->b_data; alloc_fe = (struct ocfs2_dinode *)alloc_bh->b_data;
if ((bit + 1) > ocfs2_bits_per_group(&alloc_fe->id2.i_chain)) { if ((bit + 1) > ocfs2_bits_per_group(&alloc_fe->id2.i_chain)) {
...@@ -2266,7 +2270,8 @@ static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb, ...@@ -2266,7 +2270,8 @@ static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb,
status = ocfs2_read_group_descriptor(suballoc, alloc_fe, bg_blkno, status = ocfs2_read_group_descriptor(suballoc, alloc_fe, bg_blkno,
&group_bh); &group_bh);
if (status < 0) { if (status < 0) {
mlog(ML_ERROR, "read group %llu failed %d\n", bg_blkno, status); mlog(ML_ERROR, "read group %llu failed %d\n",
(unsigned long long)bg_blkno, status);
goto bail; goto bail;
} }
...@@ -2300,7 +2305,7 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res) ...@@ -2300,7 +2305,7 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res)
struct inode *inode_alloc_inode; struct inode *inode_alloc_inode;
struct buffer_head *alloc_bh = NULL; struct buffer_head *alloc_bh = NULL;
mlog_entry("blkno: %llu", blkno); mlog_entry("blkno: %llu", (unsigned long long)blkno);
status = ocfs2_get_suballoc_slot_bit(osb, blkno, &suballoc_slot, status = ocfs2_get_suballoc_slot_bit(osb, blkno, &suballoc_slot,
&suballoc_bit); &suballoc_bit);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment