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
Branch HEAD
[fs/lustre-release.git]
/
lustre
/
llite
/
file.c
diff --git
a/lustre/llite/file.c
b/lustre/llite/file.c
index
9850774
..
79203b8
100644
(file)
--- a/
lustre/llite/file.c
+++ b/
lustre/llite/file.c
@@
-55,7
+55,7
@@
struct ll_file_data *ll_file_data_get(void)
{
struct ll_file_data *fd;
- OBD_SLAB_ALLOC_PTR
(fd, ll_file_data_slab
);
+ OBD_SLAB_ALLOC_PTR
_GFP(fd, ll_file_data_slab, CFS_ALLOC_IO
);
return fd;
}
@@
-112,7
+112,7
@@
static int ll_close_inode_openhandle(struct obd_export *md_exp,
struct ptlrpc_request *req = NULL;
struct obd_device *obd = class_exp2obd(exp);
int epoch_close = 1;
- int
seq_end = 0,
rc;
+ int rc;
ENTRY;
if (obd == NULL) {
@@
-140,17
+140,14
@@
static int ll_close_inode_openhandle(struct obd_export *md_exp,
ll_prepare_close(inode, op_data, och);
epoch_close = (op_data->op_flags & MF_EPOCH_CLOSE);
rc = md_close(md_exp, op_data, och->och_mod, &req);
- if (rc != -EAGAIN)
- seq_end = 1;
-
if (rc == -EAGAIN) {
/* This close must have the epoch closed. */
LASSERT(exp->exp_connect_flags & OBD_CONNECT_SOM);
LASSERT(epoch_close);
/* MDS has instructed us to obtain Size-on-MDS attribute from
* OSTs and send setattr to back to MDS. */
- rc = ll_sizeonmds_update(inode,
och->och_mod
,
-
&och->och_fh,
op_data->op_ioepoch);
+ rc = ll_sizeonmds_update(inode,
&och->och_fh
,
+ op_data->op_ioepoch);
if (rc) {
CERROR("inode %lu mdc Size-on-MDS update failed: "
"rc = %d\n", inode->i_ino, rc);
@@
-176,8
+173,6
@@
out:
S_ISREG(inode->i_mode) && (och->och_flags & FMODE_WRITE)) {
ll_queue_done_writing(inode, LLIF_DONE_WRITING);
} else {
- if (seq_end)
- ptlrpc_close_replay_seq(req);
md_clear_open_replay_data(md_exp, och);
/* Free @och if it is not waiting for DONE_WRITING. */
och->och_fh.cookie = DEAD_HANDLE_MAGIC;
@@
-612,9
+607,9
@@
restart:
would attempt to grab och_sem as well, that would
result in a deadlock */
up(&lli->lli_och_sem);
- it->it_
flags |= O
_CHECK_STALE;
+ it->it_
create_mode |= M
_CHECK_STALE;
rc = ll_intent_file_open(file, NULL, 0, it);
- it->it_
flags &= ~O
_CHECK_STALE;
+ it->it_
create_mode &= ~M
_CHECK_STALE;
if (rc) {
ll_file_data_put(fd);
GOTO(out_openerr, rc);
@@
-696,15
+691,14
@@
out_openerr:
return rc;
}
-/* Fills the obdo with the attributes for the inode defined by lsm */
-int ll_inode_getattr(struct inode *inode, struct obdo *obdo)
+/* Fills the obdo with the attributes for the lsm */
+static int ll_lsm_getattr(struct lov_stripe_md *lsm, struct obd_export *exp,
+ struct obd_capa *capa, struct obdo *obdo)
{
struct ptlrpc_request_set *set;
- struct
ll_inode_info *lli = ll_i2info(inode)
;
-
struct lov_stripe_md *lsm = lli->lli_smd
;
+ struct
obd_info oinfo = { { { 0 } } }
;
+
int rc
;
- struct obd_info oinfo = { { { 0 } } };
- int rc;
ENTRY;
LASSERT(lsm != NULL);
@@
-719,32
+713,44
@@
int ll_inode_getattr(struct inode *inode, struct obdo *obdo)
OBD_MD_FLBLKSZ | OBD_MD_FLATIME |
OBD_MD_FLMTIME | OBD_MD_FLCTIME |
OBD_MD_FLGROUP;
- oinfo.oi_capa =
ll_mdscapa_get(inode)
;
+ oinfo.oi_capa =
capa
;
set = ptlrpc_prep_set();
if (set == NULL) {
CERROR("can't allocate ptlrpc set\n");
rc = -ENOMEM;
} else {
- rc = obd_getattr_async(
ll_i2dtexp(inode)
, &oinfo, set);
+ rc = obd_getattr_async(
exp
, &oinfo, set);
if (rc == 0)
rc = ptlrpc_set_wait(set);
ptlrpc_set_destroy(set);
}
- capa_put(oinfo.oi_capa);
- if (rc)
- RETURN(rc);
+ if (rc == 0)
+ oinfo.oi_oa->o_valid &= (OBD_MD_FLBLOCKS | OBD_MD_FLBLKSZ |
+ OBD_MD_FLATIME | OBD_MD_FLMTIME |
+ OBD_MD_FLCTIME | OBD_MD_FLSIZE);
+ RETURN(rc);
+}
- oinfo.oi_oa->o_valid &= (OBD_MD_FLBLOCKS | OBD_MD_FLBLKSZ |
- OBD_MD_FLATIME | OBD_MD_FLMTIME |
- OBD_MD_FLCTIME | OBD_MD_FLSIZE);
+/* Fills the obdo with the attributes for the inode defined by lsm */
+int ll_inode_getattr(struct inode *inode, struct obdo *obdo)
+{
+ struct ll_inode_info *lli = ll_i2info(inode);
+ struct obd_capa *capa = ll_mdscapa_get(inode);
+ int rc;
+ ENTRY;
- obdo_refresh_inode(inode, oinfo.oi_oa, oinfo.oi_oa->o_valid);
- CDEBUG(D_INODE, "objid "LPX64" size %Lu, blocks %llu, blksize %lu\n",
- lli->lli_smd->lsm_object_id, i_size_read(inode),
- (unsigned long long)inode->i_blocks,
- (unsigned long)ll_inode_blksize(inode));
- RETURN(0);
+ rc = ll_lsm_getattr(lli->lli_smd, ll_i2dtexp(inode), capa, obdo);
+ capa_put(capa);
+ if (rc == 0) {
+ obdo_refresh_inode(inode, obdo, obdo->o_valid);
+ CDEBUG(D_INODE,
+ "objid "LPX64" size %Lu, blocks %llu, blksize %lu\n",
+ lli->lli_smd->lsm_object_id, i_size_read(inode),
+ (unsigned long long)inode->i_blocks,
+ (unsigned long)ll_inode_blksize(inode));
+ }
+ RETURN(rc);
}
int ll_merge_lvb(struct inode *inode)
@@
-773,8
+779,18
@@
int ll_merge_lvb(struct inode *inode)
int ll_glimpse_ioctl(struct ll_sb_info *sbi, struct lov_stripe_md *lsm,
lstat_t *st)
{
- /* XXX */
- return -ENOSYS;
+ struct obdo obdo = { 0 };
+ int rc;
+
+ rc = ll_lsm_getattr(lsm, sbi->ll_dt_exp, NULL, &obdo);
+ if (rc == 0) {
+ st->st_size = obdo.o_size;
+ st->st_blocks = obdo.o_blocks;
+ st->st_mtime = obdo.o_mtime;
+ st->st_atime = obdo.o_atime;
+ st->st_ctime = obdo.o_ctime;
+ }
+ return rc;
}
void ll_io_init(struct cl_io *io, const struct file *file, int write)
@@
-1448,7
+1464,8
@@
static int join_file(struct inode *head_inode, struct file *head_filp,
{
struct dentry *tail_dentry = tail_filp->f_dentry;
struct lookup_intent oit = {.it_op = IT_OPEN,
- .it_flags = head_filp->f_flags|O_JOIN_FILE};
+ .it_flags = head_filp->f_flags,
+ .it_create_mode = M_JOIN_FILE};
struct ldlm_enqueue_info einfo = { LDLM_IBITS, LCK_CW,
ll_md_blocking_ast, ldlm_completion_ast, NULL, NULL, NULL };
@@
-1506,7
+1523,7
@@
static int ll_file_join(struct inode *head, struct file *filp,
struct file *tail_filp, *first_filp, *second_filp;
struct ll_lock_tree first_tree, second_tree;
struct ll_lock_tree_node *first_node, *second_node;
- struct ll_inode_info *hlli = ll_i2info(head)
, *tlli
;
+ struct ll_inode_info *hlli = ll_i2info(head);
int rc = 0, cleanup_phase = 0;
ENTRY;
@@
-1521,7
+1538,6
@@
static int ll_file_join(struct inode *head, struct file *filp,
}
tail = igrab(tail_filp->f_dentry->d_inode);
- tlli = ll_i2info(tail);
tail_dentry = tail_filp->f_dentry;
LASSERT(tail_dentry);
cleanup_phase = 1;
@@
-2162,14
+2178,14
@@
int ll_inode_revalidate_it(struct dentry *dentry, struct lookup_intent *it)
if (IS_ERR(op_data))
RETURN(PTR_ERR(op_data));
- oit.it_
flags |= O
_CHECK_STALE;
+ oit.it_
create_mode |= M
_CHECK_STALE;
rc = md_intent_lock(exp, op_data, NULL, 0,
/* we are not interested in name
based lookup */
&oit, 0, &req,
ll_md_blocking_ast, 0);
ll_finish_md_op_data(op_data);
- oit.it_
flags &= ~O
_CHECK_STALE;
+ oit.it_
create_mode &= ~M
_CHECK_STALE;
if (rc < 0) {
rc = ll_inode_revalidate_fini(inode, rc);
GOTO (out, rc);