Lines Matching defs:dat

3  * dat.c - NILFS disk address translation.
17 #include "dat.h"
35 static inline struct nilfs_dat_info *NILFS_DAT_I(struct inode *dat)
37 return (struct nilfs_dat_info *)NILFS_MDT(dat);
40 static int nilfs_dat_prepare_entry(struct inode *dat,
45 ret = nilfs_palloc_get_entry_block(dat, req->pr_entry_nr,
48 nilfs_err(dat->i_sb,
60 static void nilfs_dat_commit_entry(struct inode *dat,
64 nilfs_mdt_mark_dirty(dat);
68 static void nilfs_dat_abort_entry(struct inode *dat,
74 int nilfs_dat_prepare_alloc(struct inode *dat, struct nilfs_palloc_req *req)
78 ret = nilfs_palloc_prepare_alloc_entry(dat, req);
82 ret = nilfs_dat_prepare_entry(dat, req, 1);
84 nilfs_palloc_abort_alloc_entry(dat, req);
89 void nilfs_dat_commit_alloc(struct inode *dat, struct nilfs_palloc_req *req)
95 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
102 nilfs_palloc_commit_alloc_entry(dat, req);
103 nilfs_dat_commit_entry(dat, req);
106 void nilfs_dat_abort_alloc(struct inode *dat, struct nilfs_palloc_req *req)
108 nilfs_dat_abort_entry(dat, req);
109 nilfs_palloc_abort_alloc_entry(dat, req);
112 static void nilfs_dat_commit_free(struct inode *dat,
119 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
126 nilfs_dat_commit_entry(dat, req);
129 nilfs_error(dat->i_sb,
134 nilfs_palloc_commit_free_entry(dat, req);
137 int nilfs_dat_prepare_start(struct inode *dat, struct nilfs_palloc_req *req)
139 return nilfs_dat_prepare_entry(dat, req, 0);
142 void nilfs_dat_commit_start(struct inode *dat, struct nilfs_palloc_req *req,
149 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
151 entry->de_start = cpu_to_le64(nilfs_mdt_cno(dat));
155 nilfs_dat_commit_entry(dat, req);
158 int nilfs_dat_prepare_end(struct inode *dat, struct nilfs_palloc_req *req)
165 ret = nilfs_dat_prepare_entry(dat, req, 0);
170 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
176 ret = nilfs_palloc_prepare_free_entry(dat, req);
178 nilfs_dat_abort_entry(dat, req);
186 void nilfs_dat_commit_end(struct inode *dat, struct nilfs_palloc_req *req,
195 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
199 end = nilfs_mdt_cno(dat);
207 nilfs_dat_commit_free(dat, req);
209 nilfs_dat_commit_entry(dat, req);
212 void nilfs_dat_abort_end(struct inode *dat, struct nilfs_palloc_req *req)
220 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
226 if (start == nilfs_mdt_cno(dat) && blocknr == 0)
227 nilfs_palloc_abort_free_entry(dat, req);
228 nilfs_dat_abort_entry(dat, req);
231 int nilfs_dat_prepare_update(struct inode *dat,
237 ret = nilfs_dat_prepare_end(dat, oldreq);
239 ret = nilfs_dat_prepare_alloc(dat, newreq);
241 nilfs_dat_abort_end(dat, oldreq);
246 void nilfs_dat_commit_update(struct inode *dat,
250 nilfs_dat_commit_end(dat, oldreq, dead);
251 nilfs_dat_commit_alloc(dat, newreq);
254 void nilfs_dat_abort_update(struct inode *dat,
258 nilfs_dat_abort_end(dat, oldreq);
259 nilfs_dat_abort_alloc(dat, newreq);
264 * @dat: DAT file inode
276 int nilfs_dat_mark_dirty(struct inode *dat, __u64 vblocknr)
282 ret = nilfs_dat_prepare_entry(dat, &req, 0);
284 nilfs_dat_commit_entry(dat, &req);
290 * @dat: DAT file inode
306 int nilfs_dat_freev(struct inode *dat, __u64 *vblocknrs, size_t nitems)
308 return nilfs_palloc_freev(dat, vblocknrs, nitems);
313 * @dat: DAT file inode
327 int nilfs_dat_move(struct inode *dat, __u64 vblocknr, sector_t blocknr)
334 ret = nilfs_palloc_get_entry_block(dat, vblocknr, 0, &entry_bh);
347 ret = nilfs_mdt_freeze_buffer(dat, entry_bh);
355 entry = nilfs_palloc_block_get_entry(dat, vblocknr, entry_bh, kaddr);
357 nilfs_crit(dat->i_sb,
371 nilfs_mdt_mark_dirty(dat);
380 * @dat: DAT file inode
397 int nilfs_dat_translate(struct inode *dat, __u64 vblocknr, sector_t *blocknrp)
405 ret = nilfs_palloc_get_entry_block(dat, vblocknr, 0, &entry_bh);
410 bh = nilfs_mdt_get_frozen_buffer(dat, entry_bh);
419 entry = nilfs_palloc_block_get_entry(dat, vblocknr, entry_bh, kaddr);
433 ssize_t nilfs_dat_get_vinfo(struct inode *dat, void *buf, unsigned int visz,
441 unsigned long entries_per_block = NILFS_MDT(dat)->mi_entries_per_block;
445 ret = nilfs_palloc_get_entry_block(dat, vinfo->vi_vblocknr,
460 dat, vinfo->vi_vblocknr, entry_bh, kaddr);
473 * nilfs_dat_read - read or get dat inode
475 * @entry_size: size of a dat entry
476 * @raw_inode: on-disk dat inode
483 struct inode *dat;
497 dat = nilfs_iget_locked(sb, NULL, NILFS_DAT_INO);
498 if (unlikely(!dat))
500 if (!(dat->i_state & I_NEW))
503 err = nilfs_mdt_init(dat, NILFS_MDT_GFP, sizeof(*di));
507 err = nilfs_palloc_init_blockgroup(dat, entry_size);
511 di = NILFS_DAT_I(dat);
513 nilfs_palloc_setup_cache(dat, &di->palloc_cache);
514 err = nilfs_mdt_setup_shadow_map(dat, &di->shadow);
518 err = nilfs_read_inode_common(dat, raw_inode);
522 unlock_new_inode(dat);
524 *inodep = dat;
527 iget_failed(dat);