* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2012, Whamcloud, Inc.
+ * Copyright (c) 2011, 2012, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#endif
};
-#ifdef HAVE_LDISKFS_PDO
-
-#define osd_ldiskfs_find_entry(dir, dentry, de, lock) \
- ll_ldiskfs_find_entry(dir, dentry, de, lock)
-#define osd_ldiskfs_add_entry(handle, child, cinode, hlock) \
- ldiskfs_add_entry(handle, child, cinode, hlock)
-
-#else /* HAVE_LDISKFS_PDO */
-
-struct htree_lock {
- int dummy;
+struct osd_obj_seq {
+ /* protects on-fly initialization */
+ int oos_subdir_count; /* subdir count for each seq */
+ struct dentry *oos_root; /* O/<seq> */
+ struct dentry **oos_dirs; /* O/<seq>/d0-dXX */
+ obd_seq oos_seq; /* seq number */
+ cfs_list_t oos_seq_list; /* list to seq_list */
};
-struct htree_lock_head {
- int dummy;
+struct osd_obj_map {
+ struct dentry *om_root; /* dentry for /O */
+ rwlock_t om_seq_list_lock; /* lock for seq_list */
+ cfs_list_t om_seq_list; /* list head for seq */
+ int om_subdir_count;
+ struct semaphore om_dir_init_sem;
};
-#define ldiskfs_htree_lock(lock, head, inode, op) do { LBUG(); } while (0)
-#define ldiskfs_htree_unlock(lock) do { LBUG(); } while (0)
-
-static inline struct htree_lock_head *ldiskfs_htree_lock_head_alloc(int dep)
-{
- LBUG();
- return NULL;
-}
-
-#define ldiskfs_htree_lock_head_free(lh) do { LBUG(); } while (0)
-
-#define LDISKFS_DUMMY_HTREE_LOCK 0xbabecafe
-
-static inline struct htree_lock *ldiskfs_htree_lock_alloc(void)
-{
- return (struct htree_lock *)LDISKFS_DUMMY_HTREE_LOCK;
-}
-
-static inline void ldiskfs_htree_lock_free(struct htree_lock *lk)
-{
- LASSERT((unsigned long)lk == LDISKFS_DUMMY_HTREE_LOCK);
-}
-
-#define HTREE_HBITS_DEF 0
-
#define osd_ldiskfs_find_entry(dir, dentry, de, lock) \
- ll_ldiskfs_find_entry(dir, dentry, de)
-#define osd_ldiskfs_add_entry(handle, child, cinode, lock) \
- ldiskfs_add_entry(handle, child, cinode)
-
-#endif /* HAVE_LDISKFS_PDO */
+ ll_ldiskfs_find_entry(dir, dentry, de, lock)
+#define osd_ldiskfs_add_entry(handle, child, cinode, hlock) \
+ ldiskfs_add_entry(handle, child, cinode, hlock)
#define OSD_OTABLE_IT_CACHE_SIZE 128
#define OSD_OTABLE_IT_CACHE_MASK (~(OSD_OTABLE_IT_CACHE_SIZE - 1))
int od_connects;
struct lu_site od_site;
- /*
- * mapping for legacy OST objids
- */
- struct osd_compat_objid *od_ost_map;
+ struct osd_obj_map *od_ost_map;
unsigned long long od_readcache_max_filesize;
int od_read_cache;
void lprocfs_osd_init_vars(struct lprocfs_static_vars *lvars);
int osd_procfs_init(struct osd_device *osd, const char *name);
int osd_procfs_fini(struct osd_device *osd);
-void osd_lprocfs_time_start(const struct lu_env *env);
-void osd_lprocfs_time_end(const struct lu_env *env,
- struct osd_device *osd, int op);
void osd_brw_stats_update(struct osd_device *osd, struct osd_iobuf *iobuf);
#endif
struct inode *osd_iget_fid(struct osd_thread_info *info, struct osd_device *dev,
struct osd_inode_id *id, struct lu_fid *fid);
-int osd_compat_init(struct osd_device *dev);
-void osd_compat_fini(struct osd_device *dev);
-int osd_compat_objid_lookup(struct osd_thread_info *info,
- struct osd_device *osd,
- const struct lu_fid *fid, struct osd_inode_id *id);
-int osd_compat_objid_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 osd_compat_objid_delete(struct osd_thread_info *info,
- struct osd_device *osd,
- const struct lu_fid *fid, struct thandle *th);
-int osd_compat_spec_lookup(struct osd_thread_info *info,
- struct osd_device *osd,
- const struct lu_fid *fid, struct osd_inode_id *id);
-int osd_compat_spec_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 osd_obj_map_init(struct osd_device *osd);
+void osd_obj_map_fini(struct osd_device *dev);
+int osd_obj_map_lookup(struct osd_thread_info *info, struct osd_device *osd,
+ const struct lu_fid *fid, struct osd_inode_id *id);
+int osd_obj_map_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 osd_obj_map_delete(struct osd_thread_info *info, struct osd_device *osd,
+ const struct lu_fid *fid, struct thandle *th);
+int osd_obj_spec_lookup(struct osd_thread_info *info, struct osd_device *osd,
+ const struct lu_fid *fid, struct osd_inode_id *id);
+int osd_obj_spec_insert(struct osd_thread_info *info, struct osd_device *osd,
+ const struct lu_fid *fid, const struct osd_inode_id *id,
+ struct thandle *th);
void osd_scrub_file_reset(struct osd_scrub *scrub, __u8 *uuid, __u64 flags);
int osd_scrub_file_store(struct osd_scrub *scrub);
const struct lu_fid *fid)
{
LASSERTF(!fid_is_idif(fid), DFID"\n", PFID(fid));
+ LASSERTF(!fid_is_last_id(fid), DFID"\n", PFID(fid));
LASSERTF(!fid_is_igif(fid), DFID"\n", PFID(fid));
LASSERT(osd->od_oi_table != NULL && osd->od_oi_count >= 1);
/* It can work even od_oi_count equals to 1 although it's unexpected,
return LDISKFS_SB(osd_sb(dev))->s_journal;
}
+static inline struct seq_server_site *osd_seq_site(struct osd_device *osd)
+{
+ return osd->od_dt_dev.dd_lu_dev.ld_site->ld_seq_site;
+}
+
+static inline char *osd_name(struct osd_device *osd)
+{
+ return osd->od_dt_dev.dd_lu_dev.ld_obd->obd_name;
+}
+
+
extern const struct dt_body_operations osd_body_ops;
extern struct lu_context_key osd_key;