Getting inode separately without some sort of locking enabled a situation where
several threads tried to populate same inode with different lsm data at the same
time leading to lsm pointer change (and leak).
i=johann
i=bzzz
-static int ll_nfs_test_inode(struct inode *inode, void *opaque)
-{
- return lu_fid_eq(&ll_i2info(inode)->lli_fid,
- (struct lu_fid *)opaque);
-}
-
static struct inode *search_inode_for_lustre(struct super_block *sb,
const struct lu_fid *fid)
{
static struct inode *search_inode_for_lustre(struct super_block *sb,
const struct lu_fid *fid)
{
CDEBUG(D_INFO, "searching inode for:(%lu,"DFID")\n", ino, PFID(fid));
CDEBUG(D_INFO, "searching inode for:(%lu,"DFID")\n", ino, PFID(fid));
- inode = ILOOKUP(sb, ino, ll_nfs_test_inode, fid);
- if (inode)
- RETURN(inode);
-
rc = ll_get_max_mdsize(sbi, &eadatalen);
if (rc)
RETURN(ERR_PTR(rc));
rc = ll_get_max_mdsize(sbi, &eadatalen);
if (rc)
RETURN(ERR_PTR(rc));