#include <fcntl.h>
#include <sys/queue.h>
+#include <sysio.h>
#ifdef HAVE_XTIO_H
#include <xtio.h>
#endif
-#include <sysio.h>
#include <fs.h>
#include <mount.h>
#include <inode.h>
struct llu_inode_info *lli = llu_i2info(inode);
struct intnl_stat *st = llu_i2stat(inode);
struct llu_sb_info *sbi = llu_i2sbi(inode);
- struct ll_fid mdc_fid;
__u64 offset;
int rc = 0;
struct ptlrpc_request *request;
struct lustre_handle lockh;
- struct mds_body *body;
+ struct mdt_body *body;
struct lookup_intent it = { .it_op = IT_READDIR };
- struct mdc_op_data data;
- struct obd_device *obddev = class_exp2obd(sbi->ll_mdc_exp);
- struct ldlm_res_id res_id =
- { .name = {st->st_ino, (__u64)lli->lli_st_generation} };
+ struct md_op_data op_data;
ldlm_policy_data_t policy = { .l_inodebits = { MDS_INODELOCK_UPDATE } };
ENTRY;
- rc = ldlm_lock_match(obddev->obd_namespace, LDLM_FL_BLOCK_GRANTED,
- &res_id, LDLM_IBITS, &policy, LCK_CR, &lockh);
+ rc = md_lock_match(sbi->ll_md_exp, LDLM_FL_BLOCK_GRANTED,
+ &lli->lli_fid, LDLM_IBITS, &policy, LCK_CR, &lockh);
if (!rc) {
- llu_prepare_mdc_op_data(&data, inode, NULL, NULL, 0, 0);
+ struct ldlm_enqueue_info einfo = {LDLM_IBITS, LCK_CR,
+ llu_md_blocking_ast, ldlm_completion_ast, NULL, inode};
- rc = mdc_enqueue(sbi->ll_mdc_exp, LDLM_IBITS, &it, LCK_CR,
- &data, &lockh, NULL, 0,
- ldlm_completion_ast, llu_mdc_blocking_ast,
- inode, LDLM_FL_CANCEL_ON_BLOCK);
+ llu_prep_md_op_data(&op_data, inode, NULL, NULL, 0, 0,
+ LUSTRE_OPC_ANY);
+
+ rc = md_enqueue(sbi->ll_md_exp, &einfo, &it,
+ &op_data, &lockh, NULL, 0,
+ LDLM_FL_CANCEL_ON_BLOCK);
request = (struct ptlrpc_request *)it.d.lustre.it_data;
if (request)
ptlrpc_req_finished(request);
}
ldlm_lock_dump_handle(D_OTHER, &lockh);
- mdc_pack_fid(&mdc_fid, st->st_ino, lli->lli_st_generation, S_IFDIR);
-
offset = (__u64)page->index << CFS_PAGE_SHIFT;
- rc = mdc_readpage(sbi->ll_mdc_exp, &mdc_fid,
- offset, page, &request);
+ rc = md_readpage(sbi->ll_md_exp, &lli->lli_fid, NULL,
+ offset, page, &request);
if (!rc) {
body = lustre_msg_buf(request->rq_repmsg, REPLY_REC_OFF,
sizeof(*body));
- LASSERT(body != NULL); /* checked by mdc_readpage() */
- /* swabbed by mdc_readpage() */
- LASSERT_REPSWABBED(request, REPLY_REC_OFF);
+ LASSERT(body != NULL); /* checked by md_readpage() */
+ /* swabbed by md_readpage() */
+ LASSERT(lustre_rep_swabbed(request, REPLY_REC_OFF));
st->st_size = body->size;
} else {
int rc;
ENTRY;
- page = alloc_page(0);
+ page = cfs_alloc_page(0);
if (!page) {
CERROR("alloc page failed\n");
RETURN(ERR_PTR(-ENOMEM));
struct llu_inode_info *lli = llu_i2info(ino);
struct intnl_stat *st = llu_i2stat(ino);
loff_t pos = *basep, offset;
+ unsigned long maxpages, pgidx;
int filled = 0;
- unsigned long pgidx, maxpages;
ENTRY;
liblustre_wait_event(0);
if (IS_ERR(page))
continue;
- /* size might have been updated by mdc_readpage */
+ /* size might have been updated by md_readpage */
maxpages = (st->st_size + CFS_PAGE_SIZE - 1) >> CFS_PAGE_SHIFT;
/* fill in buffer */
offset = (char*) de - addr;
over = filldir(buf, nbytes, de->name, de->name_len,
- (((__u64)pgidx << CFS_PAGE_SHIFT) | offset)
- + le16_to_cpu(de->rec_len),
+ (((__u64)pgidx << PAGE_SHIFT) | offset) +
+ le16_to_cpu(de->rec_len),
le32_to_cpu(de->inode), d_type, &filled);
if (over) {
free_page(page);
+ /*
+ * if buffer overflow with no data
+ * returned yet, then report error
+ * instead of eof
+ */
+ if (filled == 0)
+ RETURN(-EINVAL);
GOTO(done, 0);
}
}
free_page(page);
}
done:
- lli->lli_dir_pos = (__u64)pgidx << CFS_PAGE_SHIFT | offset;
+ lli->lli_dir_pos = pgidx << CFS_PAGE_SHIFT | offset;
*basep = lli->lli_dir_pos;
liblustre_wait_event(0);
RETURN(filled);