Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-2955 tests: make replay-ost-single/8b SLOW for ZFS
[fs/lustre-release.git]
/
lustre
/
liblustre
/
dir.c
diff --git
a/lustre/liblustre/dir.c
b/lustre/liblustre/dir.c
index
8499db8
..
a13c950
100644
(file)
--- a/
lustre/liblustre/dir.c
+++ b/
lustre/liblustre/dir.c
@@
-1,6
+1,4
@@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@
-26,8
+24,10
@@
* GPL HEADER END
*/
/*
* GPL HEADER END
*/
/*
- * Copyright
2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright
(c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* Use is subject to license terms.
+ *
+ * Copyright (c) 2011, 2012, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*/
/*
* This file is part of Lustre, http://www.lustre.org/
@@
-73,10
+73,10
@@
static int llu_dir_do_readpage(struct inode *inode, struct page *page)
struct lookup_intent it = { .it_op = IT_READDIR };
struct md_op_data op_data = {{ 0 }};
ldlm_policy_data_t policy = { .l_inodebits = { MDS_INODELOCK_UPDATE } };
struct lookup_intent it = { .it_op = IT_READDIR };
struct md_op_data op_data = {{ 0 }};
ldlm_policy_data_t policy = { .l_inodebits = { MDS_INODELOCK_UPDATE } };
- __u64 offset;
int rc = 0;
ENTRY;
int rc = 0;
ENTRY;
+ llu_prep_md_op_data(&op_data, inode, NULL, NULL, 0, 0, LUSTRE_OPC_ANY);
rc = md_lock_match(sbi->ll_md_exp, LDLM_FL_BLOCK_GRANTED,
&lli->lli_fid, LDLM_IBITS, &policy, LCK_CR, &lockh);
if (!rc) {
rc = md_lock_match(sbi->ll_md_exp, LDLM_FL_BLOCK_GRANTED,
&lli->lli_fid, LDLM_IBITS, &policy, LCK_CR, &lockh);
if (!rc) {
@@
-84,9
+84,6
@@
static int llu_dir_do_readpage(struct inode *inode, struct page *page)
llu_md_blocking_ast, ldlm_completion_ast, NULL, NULL,
inode};
llu_md_blocking_ast, ldlm_completion_ast, NULL, NULL,
inode};
- 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, NULL,
LDLM_FL_CANCEL_ON_BLOCK);
rc = md_enqueue(sbi->ll_md_exp, &einfo, &it,
&op_data, &lockh, NULL, 0, NULL,
LDLM_FL_CANCEL_ON_BLOCK);
@@
-100,9
+97,9
@@
static int llu_dir_do_readpage(struct inode *inode, struct page *page)
}
ldlm_lock_dump_handle(D_OTHER, &lockh);
}
ldlm_lock_dump_handle(D_OTHER, &lockh);
- o
ffset = (__u64)hash_x_index(page->index
);
- rc = md_readpage(sbi->ll_md_exp, &lli->lli_fid, NULL,
-
offset,
page, &request);
+ o
p_data.op_offset = (__u64)hash_x_index(page->index, 0
);
+ op_data.op_npages = 1;
+
rc = md_readpage(sbi->ll_md_exp, &op_data, &
page, &request);
if (!rc) {
body = req_capsule_server_get(&request->rq_pill, &RMF_MDT_BODY);
LASSERT(body != NULL); /* checked by md_readpage() */
if (!rc) {
body = req_capsule_server_get(&request->rq_pill, &RMF_MDT_BODY);
LASSERT(body != NULL); /* checked by md_readpage() */
@@
-129,7
+126,7
@@
static cfs_page_t *llu_dir_read_page(struct inode *ino, __u64 hash,
OBD_PAGE_ALLOC(page, 0);
if (!page)
RETURN(ERR_PTR(-ENOMEM));
OBD_PAGE_ALLOC(page, 0);
if (!page)
RETURN(ERR_PTR(-ENOMEM));
- page->index = hash_x_index(hash);
+ page->index = hash_x_index(hash
, 0
);
rc = llu_dir_do_readpage(ino, page);
if (rc) {
rc = llu_dir_do_readpage(ino, page);
if (rc) {
@@
-144,13
+141,12
@@
void *(*memmover)(void *, const void *, size_t) = memmove;
#define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
#define ROUND_UP64(x) (((x)+sizeof(__u64)-1) & ~(sizeof(__u64)-1))
#define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
#define ROUND_UP64(x) (((x)+sizeof(__u64)-1) & ~(sizeof(__u64)-1))
-static int filldir(char *buf, int buflen,
- const char *name, int namelen, loff_t offset,
- ino_t ino, unsigned int d_type, int *filled)
+static int filldir(char *buf, int buflen, const char *name, int namelen,
+ loff_t offset, ino_t ino, unsigned int d_type, int *filled)
{
{
-
cfs_dirent_t *dirent = (cfs_dirent_t *)
(buf + *filled);
-
cfs_dirent_t
holder;
-
int reclen = ROUND_UP64(NAME_OFFSET(dirent) + namelen + 1);
+
struct dirent64 *dirent = (struct dirent64 *)
(buf + *filled);
+
struct dirent64
holder;
+ int reclen = ROUND_UP64(NAME_OFFSET(dirent) + namelen + 1);
/*
* @buf is not guaranteed to be properly aligned. To work around,
/*
* @buf is not guaranteed to be properly aligned. To work around,
@@
-197,7
+193,6
@@
ssize_t llu_iop_filldirentries(struct inode *dir, _SYSIO_OFF_T *basep,
int filled = 0;
int rc;
int done;
int filled = 0;
int rc;
int done;
- int shift;
__u16 type;
ENTRY;
__u16 type;
ENTRY;
@@
-208,7
+203,7
@@
ssize_t llu_iop_filldirentries(struct inode *dir, _SYSIO_OFF_T *basep,
RETURN(0);
}
RETURN(0);
}
- if (pos == DIR_END_OFF)
+ if (pos ==
MDS_
DIR_END_OFF)
/*
* end-of-file.
*/
/*
* end-of-file.
*/
@@
-216,7
+211,6
@@
ssize_t llu_iop_filldirentries(struct inode *dir, _SYSIO_OFF_T *basep,
rc = 0;
done = 0;
rc = 0;
done = 0;
- shift = 0;
ll_dir_chain_init(&chain);
page = llu_dir_read_page(dir, pos, 0, &chain);
ll_dir_chain_init(&chain);
page = llu_dir_read_page(dir, pos, 0, &chain);
@@
-229,7
+223,7
@@
ssize_t llu_iop_filldirentries(struct inode *dir, _SYSIO_OFF_T *basep,
* If page is empty (end of directoryis reached),
* use this value.
*/
* If page is empty (end of directoryis reached),
* use this value.
*/
- __u64 hash = DIR_END_OFF;
+ __u64 hash =
MDS_
DIR_END_OFF;
__u64 next;
dp = page->addr;
__u64 next;
dp = page->addr;
@@
-259,7
+253,7
@@
ssize_t llu_iop_filldirentries(struct inode *dir, _SYSIO_OFF_T *basep,
fid = ent->lde_fid;
name = ent->lde_name;
fid_le_to_cpu(&fid, &fid);
fid = ent->lde_fid;
name = ent->lde_name;
fid_le_to_cpu(&fid, &fid);
- ino = cl_fid_build_ino(&fid);
+ ino = cl_fid_build_ino(&fid
, 0
);
type = ll_dirent_type_get(ent);
done = filldir(buf, nbytes, name, namelen,
(loff_t)hash, ino, type,
type = ll_dirent_type_get(ent);
done = filldir(buf, nbytes, name, namelen,
(loff_t)hash, ino, type,
@@
-269,7
+263,7
@@
ssize_t llu_iop_filldirentries(struct inode *dir, _SYSIO_OFF_T *basep,
OBD_PAGE_FREE(page);
if (!done) {
pos = next;
OBD_PAGE_FREE(page);
if (!done) {
pos = next;
- if (pos == DIR_END_OFF)
+ if (pos ==
MDS_
DIR_END_OFF)
/*
* End of directory reached.
*/
/*
* End of directory reached.
*/