* nice
*/
status = -ESTALE;
- } else
+ } else if (status != -ESTALE) {
mlog(ML_ERROR, "test inode bit failed %d\n", status);
+ }
goto unlock_nfs_sync;
}
if (status < 0) {
if (status == -EINVAL) {
status = -ESTALE;
- } else
+ } else if (status != -ESTALE) {
mlog(ML_ERROR, "test inode bit failed %d\n", status);
+ }
parent = ERR_PTR(status);
goto bail_unlock;
}
struct ocfs2_group_desc *group;
struct buffer_head *group_bh = NULL;
u64 bg_blkno;
- int status;
+ int status, quiet = 0, released = 0;
trace_ocfs2_test_suballoc_bit((unsigned long long)blkno,
(unsigned int)bit);
bg_blkno = group_blkno ? group_blkno :
ocfs2_which_suballoc_group(blkno, bit);
- status = ocfs2_read_group_descriptor(suballoc, alloc_di, bg_blkno,
- &group_bh);
- if (status < 0) {
+ status = ocfs2_read_hint_group_descriptor(suballoc, alloc_di, bg_blkno,
+ &group_bh, &released);
+ if (released) {
+ quiet = 1;
+ status = -ESTALE;
+ goto bail;
+ } else if (status < 0) {
mlog(ML_ERROR, "read group %llu failed %d\n",
(unsigned long long)bg_blkno, status);
goto bail;
bail:
brelse(group_bh);
- if (status)
+ if (status && !quiet)
mlog_errno(status);
return status;
}
*/
int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res)
{
- int status;
+ int status, quiet = 0;
u64 group_blkno = 0;
u16 suballoc_bit = 0, suballoc_slot = 0;
struct inode *inode_alloc_inode;
status = ocfs2_test_suballoc_bit(osb, inode_alloc_inode, alloc_bh,
group_blkno, blkno, suballoc_bit, res);
- if (status < 0)
- mlog(ML_ERROR, "test suballoc bit failed %d\n", status);
+ if (status < 0) {
+ if (status == -ESTALE)
+ quiet = 1;
+ else
+ mlog(ML_ERROR, "test suballoc bit failed %d\n", status);
+ }
ocfs2_inode_unlock(inode_alloc_inode, 0);
inode_unlock(inode_alloc_inode);
iput(inode_alloc_inode);
brelse(alloc_bh);
bail:
- if (status)
+ if (status && !quiet)
mlog_errno(status);
return status;
}