* Author: Alex Zhuravlev <alexey.zhuravlev@intel.com>
* Author: Mikhail Pershin <mike.pershin@intel.com>
*/
+/**
+ * The Logical Object Device (LOD) layer manages access to striped
+ * objects (both regular files and directories). It implements the DT
+ * device and object APIs and is responsible for creating, storing,
+ * and loading striping information as an extended attribute of the
+ * underlying OSD object. LOD is the server side analog of the LOV and
+ * LMV layers on the client side.
+ *
+ * Metadata LU object stack (layers of the same compound LU object,
+ * all have the same FID):
+ *
+ * MDT
+ * | MD API
+ * MDD
+ * | DT API
+ * LOD
+ * / \ DT API
+ * OSD OSP
+ *
+ * During LOD object initialization the localness or remoteness of the
+ * object FID dictates the choice between OSD and OSP.
+ *
+ * An LOD object (file or directory) with N stripes (each has a
+ * different FID):
+ *
+ * LOD
+ * |
+ * +---+---+---+...+
+ * | | | | |
+ * S0 S1 S2 S3 S(N-1) OS[DP] objects, seen as DT objects by LOD
+ *
+ * When upper layers must access an object's stripes (which are
+ * themselves OST or MDT LU objects) LOD finds these objects by their
+ * FIDs and stores them as an array of DT object pointers on the
+ * object. Declarations and operations on LOD objects are received by
+ * LOD (as DT object operations) and performed on the underlying
+ * OS[DP] object and (as needed) on the stripes. From the perspective
+ * of LOD, a stripe-less file (created by mknod() or open with
+ * O_LOV_DELAY_CREATE) is an object which does not yet have stripes,
+ * while a non-striped directory (created by mkdir()) is an object
+ * which will never have stripes.
+ *
+ * The LOD layer also implements a small subset of the OBD device API
+ * to support MDT stack initialization and finalization (an MDD device
+ * connects and disconnects itself to and from the underlying LOD
+ * device), and pool management. In turn LOD uses the OBD device API
+ * to connect it self to the underlying OSD, and to connect itself to
+ * OSP devices representing the MDTs and OSTs that bear the stripes of
+ * its objects.
+ */
#define DEBUG_SUBSYSTEM S_MDS
{
struct lu_device *next;
int rc = 0;
- int i;
+ unsigned int i;
lod_getref(ltd);
if (ltd->ltd_tgts_size <= 0) {
{
struct lod_device *lod = lu2lod_dev(dev);
struct lu_device *next = &lod->lod_child->dd_lu_dev;
- int i, rc;
+ unsigned int i;
+ int rc;
ENTRY;
LASSERT(lod->lod_recovery_completed == 0);
{
struct lod_device *lod = dt2lod_dev(dev);
struct lod_ost_desc *ost;
- int rc = 0, i;
+ unsigned int i;
+ int rc = 0;
ENTRY;
lod_getref(&lod->lod_ost_descs);
info->lti_ea_store = NULL;
info->lti_ea_store_size = 0;
}
+ lu_buf_free(&info->lti_linkea_buf);
OBD_FREE_PTR(info);
}
struct obd_device *obd = exp->exp_obd;
struct lod_device *d;
struct lod_ost_desc *ost;
- int i, rc = 1;
+ unsigned int i;
+ int rc = 1;
if (!obd->obd_set_up || obd->obd_stopping)
RETURN(-EAGAIN);