* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012, Intel Corporation.
+ * Copyright (c) 2012, 2013, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
if (IS_ERR(d))
GOTO(cleanup, rc = PTR_ERR(d));
+ ldiskfs_set_inode_state(d->d_inode, LDISKFS_STATE_LUSTRE_NO_OI);
omm->omm_remote_parent = d;
/* Set LMA for remote parent inode */
mutex_lock(&parent->d_inode->i_mutex);
rc = osd_ldiskfs_add_entry(oh->ot_handle, dentry, obj->oo_inode,
NULL);
+ CDEBUG(D_INODE, "%s: add %s:%lu to remote parent %lu.\n", osd_name(osd),
+ name, obj->oo_inode->i_ino, parent->d_inode->i_ino);
LASSERTF(parent->d_inode->i_nlink > 1, "%s: %lu nlink %d",
osd_name(osd), parent->d_inode->i_ino,
parent->d_inode->i_nlink);
mutex_unlock(&parent->d_inode->i_mutex);
RETURN(-ENOENT);
}
+ CDEBUG(D_INODE, "%s: el %s:%lu to remote parent %lu.\n", osd_name(osd),
+ name, obj->oo_inode->i_ino, parent->d_inode->i_ino);
rc = ldiskfs_delete_entry(oh->ot_handle, parent->d_inode, de, bh);
LASSERTF(parent->d_inode->i_nlink > 1, "%s: %lu nlink %d",
osd_name(osd), parent->d_inode->i_ino,
mark_inode_dirty(parent->d_inode);
mutex_unlock(&parent->d_inode->i_mutex);
brelse(bh);
+
+ /* Get rid of REMOTE_PARENT flag from incompat */
+ lma->lma_incompat &= ~LMAI_REMOTE_PARENT;
+ lustre_lma_swab(lma);
+ rc = __osd_xattr_set(oti, obj->oo_inode, XATTR_NAME_LMA, lma,
+ sizeof(*lma), XATTR_REPLACE);
RETURN(rc);
}
LASSERT(map);
LASSERT(map->om_root);
- fid_ostid_pack(fid, ostid);
- osd_seq = osd_seq_load(dev, ostid->oi_seq);
+ fid_to_ostid(fid, ostid);
+ osd_seq = osd_seq_load(dev, ostid_seq(ostid));
if (IS_ERR(osd_seq))
RETURN(PTR_ERR(osd_seq));
- dirn = ostid->oi_id & (osd_seq->oos_subdir_count - 1);
+ dirn = ostid_id(ostid) & (osd_seq->oos_subdir_count - 1);
d_seq = osd_seq->oos_dirs[dirn];
LASSERT(d_seq);
- osd_oid_name(name, fid, ostid->oi_id);
+ osd_oid_name(name, fid, ostid_id(ostid));
child = &info->oti_child_dentry;
child->d_parent = d_seq;
LASSERT(map);
/* map fid to seq:objid */
- fid_ostid_pack(fid, ostid);
+ fid_to_ostid(fid, ostid);
- osd_seq = osd_seq_load(osd, ostid->oi_seq);
+ osd_seq = osd_seq_load(osd, ostid_seq(ostid));
if (IS_ERR(osd_seq))
RETURN(PTR_ERR(osd_seq));
- dirn = ostid->oi_id & (osd_seq->oos_subdir_count - 1);
+ dirn = ostid_id(ostid) & (osd_seq->oos_subdir_count - 1);
d = osd_seq->oos_dirs[dirn];
LASSERT(d);
- osd_oid_name(name, fid, ostid->oi_id);
+ osd_oid_name(name, fid, ostid_id(ostid));
rc = osd_obj_add_entry(info, osd, d, name, id, th);
RETURN(rc);
LASSERT(map);
/* map fid to seq:objid */
- fid_ostid_pack(fid, ostid);
+ fid_to_ostid(fid, ostid);
- osd_seq = osd_seq_load(osd, ostid->oi_seq);
+ osd_seq = osd_seq_load(osd, ostid_seq(ostid));
if (IS_ERR(osd_seq))
GOTO(cleanup, rc = PTR_ERR(osd_seq));
- dirn = ostid->oi_id & (osd_seq->oos_subdir_count - 1);
+ dirn = ostid_id(ostid) & (osd_seq->oos_subdir_count - 1);
d = osd_seq->oos_dirs[dirn];
LASSERT(d);
- osd_oid_name(name, fid, ostid->oi_id);
+ osd_oid_name(name, fid, ostid_id(ostid));
rc = osd_obj_del_entry(info, osd, d, name, th);
cleanup:
RETURN(rc);