#define LL_IOC_OBD_STATFS IOC_OBD_STATFS
#define IOC_MDC_GETSTRIPE IOC_MDC_GETFILESTRIPE
-/* Do not define O_CHECK_STALE as 0200000000,
- * which is conflict with MDS_OPEN_OWNEROVERRIDE */
-#define O_CHECK_STALE 020000000 /* hopefully this does not conflict */
-
#define O_LOV_DELAY_CREATE 0100000000 /* hopefully this does not conflict */
-#define O_JOIN_FILE 0400000000 /* hopefully this does not conflict */
#define LL_FILE_IGNORE_LOCK 0x00000001
#define LL_FILE_GROUP_LOCKED 0x00000002
void *mi_cbdata;
};
+/* these are local flags, used only on the client, private */
+#define M_CHECK_STALE 0200000000
+#define M_JOIN_FILE 0400000000 /* its counterpart is
+ * MDS_OPEN_JOIN_FILE */
+
#endif
do_lock:
it->it_create_mode &= ~current->fs->umask;
- it->it_flags |= O_CHECK_STALE;
+ it->it_create_mode |= M_CHECK_STALE;
rc = mdc_intent_lock(exp, &op_data, NULL, 0, it, lookup_flags,
&req, ll_mdc_blocking_ast, 0);
- it->it_flags &= ~O_CHECK_STALE;
+ it->it_create_mode &= ~M_CHECK_STALE;
if (it->it_op == IT_GETATTR && !first)
/* If there are too many locks on client-side, then some
* locks taken by statahead maybe dropped automatically
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);
{
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_PW,
ll_mdc_blocking_ast, ldlm_completion_ast, NULL, NULL };
/* Call getattr by fid, so do not provide name at all. */
ll_prepare_mdc_op_data(&op_data, dentry->d_parent->d_inode,
dentry->d_inode, NULL, 0, 0, NULL);
- oit.it_flags |= O_CHECK_STALE;
+ oit.it_create_mode |= M_CHECK_STALE;
rc = mdc_intent_lock(exp, &op_data, NULL, 0,
/* we are not interested in name
based lookup */
&oit, 0, &req,
ll_mdc_blocking_ast, 0);
- 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);
mode, uid, gid, cap_effective, rdev);
}
-static __u32 mds_pack_open_flags(__u32 flags)
+static __u32 mds_pack_open_flags(__u32 flags, __u32 mode)
{
__u32 cr_flags = (flags & (FMODE_READ | FMODE_WRITE |
MDS_OPEN_DELAY_CREATE | MDS_OPEN_HAS_EA |
cr_flags |= MDS_OPEN_SYNC;
if (flags & O_DIRECTORY)
cr_flags |= MDS_OPEN_DIRECTORY;
- if (flags & O_JOIN_FILE)
+ if (mode & M_JOIN_FILE)
cr_flags |= MDS_OPEN_JOIN_FILE;
#ifdef FMODE_EXEC
if (flags & FMODE_EXEC)
rec->cr_fid = op_data->fid1;
memset(&rec->cr_replayfid, 0, sizeof(rec->cr_replayfid));
rec->cr_mode = mode;
- rec->cr_flags = mds_pack_open_flags(flags);
+ rec->cr_flags = mds_pack_open_flags(flags, mode);
rec->cr_rdev = rdev;
rec->cr_time = op_data->mod_time;
rec->cr_suppgid = op_data->suppgids[0];
memcpy(&rec->cr_fid1, &op_data->fid1, sizeof(op_data->fid1));
memcpy(&rec->cr_fid2, &op_data->fid2, sizeof(op_data->fid2));
rec->cr_mode = mode;
- rec->cr_flags = mds_pack_open_flags(flags);
+ rec->cr_flags = mds_pack_open_flags(flags, mode);
rec->cr_rdev = rdev;
rec->cr_time = op_data->mod_time;
rec->cr_suppgid1 = op_data->suppgids[0];
cl_max_mds_easize,
[DLM_REPLY_REC_OFF+2] = LUSTRE_POSIX_ACL_MAX_SIZE };
CFS_LIST_HEAD(cancels);
- int do_join = (it->it_flags & O_JOIN_FILE) && data->data;
+ int do_join = (it->it_create_mode & M_JOIN_FILE) && data->data;
int count = 0;
int bufcount = 6;
int repbufcount = 5;
mdc_join_pack(req, bufcount - 1, data, head_size);
} else {
req = ldlm_prep_enqueue_req(exp, bufcount, size,&cancels,count);
- it->it_flags &= ~O_JOIN_FILE;
+ it->it_create_mode &= ~M_JOIN_FILE;
}
if (req) {
}
}
req = mdc_intent_open_pack(exp, it, data, lmm, lmmsize);
- if (it->it_flags & O_JOIN_FILE) {
+ if (it->it_create_mode & M_JOIN_FILE) {
policy.l_inodebits.bits = MDS_INODELOCK_UPDATE;
}
} else if (it->it_op & IT_UNLINK) {
if (data->fid2.id && (it->it_op != IT_GETATTR) &&
( !mdc_exp_is_2_0_server(exp) ||
- (mdc_exp_is_2_0_server(exp) && (it->it_flags & O_CHECK_STALE)))) {
+ (mdc_exp_is_2_0_server(exp) && (it->it_create_mode & M_CHECK_STALE)))) {
it_set_disposition(it, DISP_ENQ_COMPLETE);
/* Also: did we find the same inode? */