-/* -*- 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.
oa->o_nlink = ost_idx;
oa->o_flags |= OBD_FL_RECREATE_OBJS;
oa->o_valid = OBD_MD_FLID | OBD_MD_FLFLAGS | OBD_MD_FLGROUP;
- obdo_from_inode(oa, inode, &ll_i2info(inode)->lli_fid, OBD_MD_FLTYPE |
- OBD_MD_FLATIME | OBD_MD_FLMTIME | OBD_MD_FLCTIME);
+ obdo_from_inode(oa, inode, OBD_MD_FLTYPE | OBD_MD_FLATIME |
+ OBD_MD_FLMTIME | OBD_MD_FLCTIME);
+ obdo_set_parent_fid(oa, &ll_i2info(inode)->lli_fid);
memcpy(lsm2, lsm, lsm_size);
- rc = obd_create(exp, oa, &lsm2, &oti);
+ rc = obd_create(NULL, exp, oa, &lsm2, &oti);
OBD_FREE_LARGE(lsm2, lsm_size);
GOTO(out, rc);
fm_key.oa.o_seq = lsm->lsm_object_seq;
fm_key.oa.o_valid = OBD_MD_FLID | OBD_MD_FLGROUP;
- obdo_from_inode(&fm_key.oa, inode, &ll_i2info(inode)->lli_fid,
- OBD_MD_FLSIZE);
+ obdo_from_inode(&fm_key.oa, inode, OBD_MD_FLSIZE);
+ obdo_set_parent_fid(&fm_key.oa, &ll_i2info(inode)->lli_fid);
/* If filesize is 0, then there would be no objects for mapping */
if (fm_key.oa.o_size == 0) {
fiemap->fm_mapped_extents = 0;
memcpy(&fm_key.fiemap, fiemap, sizeof(*fiemap));
- rc = obd_get_info(exp, sizeof(fm_key), &fm_key, &vallen, fiemap, lsm);
+ rc = obd_get_info(NULL, exp, sizeof(fm_key), &fm_key, &vallen,
+ fiemap, lsm);
if (rc)
CERROR("obd_get_info failed: rc = %d\n", rc);
RETURN(rc);
}
-#ifdef HAVE_UNLOCKED_IOCTL
long ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
struct inode *inode = file->f_dentry->d_inode;
-#else
-int ll_file_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
- unsigned long arg)
-{
-#endif
struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
int flags;
return rc ? -EIO : 0;
}
+/**
+ * Called to make sure a portion of file has been written out.
+ * if @local_only is not true, it will send OST_SYNC RPCs to ost.
+ */
+int cl_sync_file_range(struct inode *inode, loff_t start, loff_t end)
+{
+ struct cl_env_nest nest;
+ struct lu_env *env;
+ struct cl_io *io;
+ struct obd_capa *capa = NULL;
+ struct cl_fsync_io *fio;
+ int result;
+ ENTRY;
+
+ env = cl_env_nested_get(&nest);
+ if (IS_ERR(env))
+ RETURN(PTR_ERR(env));
+
+ capa = ll_osscapa_get(inode, CAPA_OPC_OSS_WRITE);
+
+ io = ccc_env_thread_io(env);
+ io->ci_obj = cl_i2info(inode)->lli_clob;
+
+ /* initialize parameters for sync */
+ fio = &io->u.ci_fsync;
+ fio->fi_capa = capa;
+ fio->fi_start = start;
+ fio->fi_end = end;
+ fio->fi_fid = ll_inode2fid(inode);
+
+ if (cl_io_init(env, io, CIT_FSYNC, io->ci_obj) == 0)
+ result = cl_io_loop(env, io);
+ else
+ result = io->ci_result;
+ cl_io_fini(env, io);
+ cl_env_nested_put(&nest, env);
+
+ capa_put(capa);
+
+ RETURN(result);
+}
+
#ifdef HAVE_FILE_FSYNC_4ARGS
int ll_fsync(struct file *file, loff_t start, loff_t end, int data)
#elif defined(HAVE_FILE_FSYNC_2ARGS)
ptlrpc_req_finished(req);
if (data && lsm) {
- struct obd_info *oinfo;
-
- OBD_ALLOC_PTR(oinfo);
- if (!oinfo)
- RETURN(rc ? rc : -ENOMEM);
- OBDO_ALLOC(oinfo->oi_oa);
- if (!oinfo->oi_oa) {
- OBD_FREE_PTR(oinfo);
- RETURN(rc ? rc : -ENOMEM);
- }
- oinfo->oi_oa->o_id = lsm->lsm_object_id;
- oinfo->oi_oa->o_seq = lsm->lsm_object_seq;
- oinfo->oi_oa->o_valid = OBD_MD_FLID | OBD_MD_FLGROUP;
- obdo_from_inode(oinfo->oi_oa, inode, &ll_i2info(inode)->lli_fid,
- OBD_MD_FLTYPE | OBD_MD_FLATIME |
- OBD_MD_FLMTIME | OBD_MD_FLCTIME |
- OBD_MD_FLGROUP);
- oinfo->oi_md = lsm;
- oinfo->oi_capa = ll_osscapa_get(inode, CAPA_OPC_OSS_WRITE);
- err = obd_sync_rqset(ll_i2sbi(inode)->ll_dt_exp, oinfo, 0,
- OBD_OBJECT_EOF);
- capa_put(oinfo->oi_capa);
+ err = cl_sync_file_range(inode, 0, OBD_OBJECT_EOF);
if (!rc)
rc = err;
- OBDO_FREE(oinfo->oi_oa);
- OBD_FREE_PTR(oinfo);
lli->lli_write_rc = rc < 0 ? rc : 0;
}
if ((file_lock->fl_flags & FL_FLOCK) &&
(rc == 0 || file_lock->fl_type == F_UNLCK))
- ll_flock_lock_file_wait(file, file_lock, (cmd == F_SETLKW));
-#ifdef HAVE_F_OP_FLOCK
+ flock_lock_file_wait(file, file_lock);
if ((file_lock->fl_flags & FL_POSIX) &&
(rc == 0 || file_lock->fl_type == F_UNLCK) &&
!(flags & LDLM_FL_TEST_LOCK))
posix_lock_file_wait(file, file_lock);
-#endif
RETURN(rc);
}
.READ_METHOD = READ_FUNCTION,
.write = ll_file_write,
.WRITE_METHOD = WRITE_FUNCTION,
-#ifdef HAVE_UNLOCKED_IOCTL
.unlocked_ioctl = ll_file_ioctl,
-#else
- .ioctl = ll_file_ioctl,
-#endif
.open = ll_file_open,
.release = ll_file_release,
.mmap = ll_file_mmap,
.READ_METHOD = READ_FUNCTION,
.write = ll_file_write,
.WRITE_METHOD = WRITE_FUNCTION,
-#ifdef HAVE_UNLOCKED_IOCTL
.unlocked_ioctl = ll_file_ioctl,
-#else
- .ioctl = ll_file_ioctl,
-#endif
.open = ll_file_open,
.release = ll_file_release,
.mmap = ll_file_mmap,
#endif
.fsync = ll_fsync,
.flush = ll_flush,
-#ifdef HAVE_F_OP_FLOCK
.flock = ll_file_flock,
-#endif
.lock = ll_file_flock
};
.READ_METHOD = READ_FUNCTION,
.write = ll_file_write,
.WRITE_METHOD = WRITE_FUNCTION,
-#ifdef HAVE_UNLOCKED_IOCTL
.unlocked_ioctl = ll_file_ioctl,
-#else
- .ioctl = ll_file_ioctl,
-#endif
.open = ll_file_open,
.release = ll_file_release,
.mmap = ll_file_mmap,
#endif
.fsync = ll_fsync,
.flush = ll_flush,
-#ifdef HAVE_F_OP_FLOCK
.flock = ll_file_noflock,
-#endif
.lock = ll_file_noflock
};