#include <lu_object.h>
#include <md_object.h>
+#define OSD_OI_FID_NR (1UL << OSD_OI_FID_OID_BITS)
+#define OSD_OI_FID_NR_MAX (1UL << OSD_OI_FID_OID_BITS_MAX)
+
+#define OSD_OII_NOGEN (0)
+
struct lu_fid;
struct osd_thread_info;
struct lu_site;
* Storage cookie. Datum uniquely identifying inode on the underlying file
* system.
*
- * XXX Currently this is ext2/ext3/ldiskfs specific thing. In the future this
- * should be generalized to work with other local file systems.
+ * osd_inode_id is the internal ldiskfs identifier for an object. It should
+ * not be visible outside of the osd-ldiskfs. Other OSDs may have different
+ * identifiers, so this cannot form any part of the OSD API.
*/
struct osd_inode_id {
- __u32 oii_ino; /* inode number */
- __u32 oii_gen; /* inode generation */
+ __u32 oii_ino; /* inode number */
+ __u32 oii_gen; /* inode generation */
};
+struct osd_idmap_cache {
+ struct lu_fid oic_fid;
+ struct osd_inode_id oic_lid;
+};
+
+static inline void osd_id_pack(struct osd_inode_id *tgt,
+ const struct osd_inode_id *src)
+{
+ tgt->oii_ino = cpu_to_be32(src->oii_ino);
+ tgt->oii_gen = cpu_to_be32(src->oii_gen);
+}
+
+static inline void osd_id_unpack(struct osd_inode_id *tgt,
+ struct osd_inode_id *src)
+{
+ tgt->oii_ino = be32_to_cpu(src->oii_ino);
+ tgt->oii_gen = be32_to_cpu(src->oii_gen);
+}
+
+static inline void osd_id_gen(struct osd_inode_id *id, __u32 ino, __u32 gen)
+{
+ id->oii_ino = ino;
+ id->oii_gen = gen;
+}
+
+static inline void osd_id_to_inode(struct inode *inode,
+ const struct osd_inode_id *id)
+{
+ inode->i_ino = id->oii_ino;
+ inode->i_generation = id->oii_gen;
+}
+
+static inline int osd_id_eq(const struct osd_inode_id *id0,
+ const struct osd_inode_id *id1)
+{
+ return (id0->oii_ino == id1->oii_ino) &&
+ (id0->oii_gen == id1->oii_gen ||
+ id0->oii_gen == OSD_OII_NOGEN ||
+ id1->oii_gen == OSD_OII_NOGEN);
+}
+
int osd_oi_mod_init(void);
int osd_oi_init(struct osd_thread_info *info, struct osd_device *osd);
void osd_oi_fini(struct osd_thread_info *info, struct osd_device *osd);
+int __osd_oi_lookup(struct osd_thread_info *info, struct osd_device *osd,
+ const struct lu_fid *fid, struct osd_inode_id *id);
int osd_oi_lookup(struct osd_thread_info *info, struct osd_device *osd,
- const struct lu_fid *fid, struct osd_inode_id *id);
+ const struct lu_fid *fid, struct osd_inode_id *id);
int osd_oi_insert(struct osd_thread_info *info, struct osd_device *osd,
- const struct lu_fid *fid, const struct osd_inode_id *id,
- struct thandle *th, int ingore_quota);
+ const struct lu_fid *fid, const struct osd_inode_id *id,
+ struct thandle *th);
int osd_oi_delete(struct osd_thread_info *info,
- struct osd_device *osd, const struct lu_fid *fid,
- struct thandle *th);
+ struct osd_device *osd, const struct lu_fid *fid,
+ struct thandle *th);
#endif /* __KERNEL__ */
#endif /* _OSD_OI_H */