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
b=21982 long file truncate problem
[fs/lustre-release.git]
/
lustre
/
llite
/
vvp_io.c
diff --git
a/lustre/llite/vvp_io.c
b/lustre/llite/vvp_io.c
index
f208b0e
..
89bb048
100644
(file)
--- a/
lustre/llite/vvp_io.c
+++ b/
lustre/llite/vvp_io.c
@@
-293,7
+293,7
@@
static int vvp_io_trunc_lock(const struct lu_env *env,
{
struct ccc_io *vio = cl2ccc_io(env, ios);
struct cl_io *io = ios->cis_io;
-
size
_t new_size = io->u.ci_truncate.tr_size;
+
loff
_t new_size = io->u.ci_truncate.tr_size;
__u32 enqflags = new_size == 0 ? CEF_DISCARD_DATA : 0;
int result;
@@
-327,7
+327,7
@@
static int vvp_io_trunc_start(const struct lu_env *env,
struct cl_io *io = ios->cis_io;
struct inode *inode = ccc_object_inode(io->ci_obj);
struct cl_object *obj = ios->cis_obj;
-
size
_t size = io->u.ci_truncate.tr_size;
+
loff
_t size = io->u.ci_truncate.tr_size;
pgoff_t start = cl_index(obj, size);
int result;
@@
-375,7
+375,7
@@
static void vvp_io_trunc_end(const struct lu_env *env,
struct vvp_io *vio = cl2vvp_io(env, ios);
struct cl_io *io = ios->cis_io;
struct inode *inode = ccc_object_inode(io->ci_obj);
-
size
_t size = io->u.ci_truncate.tr_size;
+
loff
_t size = io->u.ci_truncate.tr_size;
if (vio->cui_partpage != NULL) {
cl_page_disown(env, ios->cis_io, vio->cui_partpage);
@@
-932,12
+932,17
@@
static int vvp_io_commit_write(const struct lu_env *env,
size = cl_offset(obj, pg->cp_index) + to;
+ ll_inode_size_lock(inode, 0);
if (result == 0) {
if (size > i_size_read(inode))
-
i_size_write
(inode, size);
+
cl_isize_write_nolock
(inode, size);
cl_page_export(env, pg, 1);
- } else if (size > i_size_read(inode))
- cl_page_discard(env, io, pg);
+ } else {
+ if (size > i_size_read(inode))
+ cl_page_discard(env, io, pg);
+ }
+ ll_inode_size_unlock(inode, 0);
+
RETURN(result);
}