--- /dev/null
+.TH liblustreapi 7 "2009 Aug 10" Lustre liblustreapi
+.SH NAME
+liblustre \- The liblustre library
+.SH DESCRIPTION
+The liblustre library provides functions to access and/or modify settings specific to the Lustre filesystem (allocation policies, quotas, etc).
+.SH "SEE ALSO"
+.BR lustre (7),
+.BR llapi_file_create (3),
+.BR llapi_file_open (3),
+.BR llapi_file_get_stripe (3),
+.BR llapi_quotactl (3)
loff_t old_size = 0;
unsigned int ia_valid;
struct inode *inode;
+ struct page *page = NULL;
struct iattr iattr;
void *handle;
ENTRY;
if (rc)
GOTO(out_unlock, rc);
+ /* Let's pin the last page so that ldiskfs_truncate
+ * should not start GFP_FS allocation (20008). */
+ if (ia_valid & ATTR_SIZE) {
+ page = grab_cache_page(inode->i_mapping,
+ iattr.ia_size >> PAGE_CACHE_SHIFT);
+ if (page == NULL)
+ GOTO(out_unlock, rc = -ENOMEM);
+
+ unlock_page(page);
+ }
+
/* If the inode still has SUID+SGID bits set (see filter_precreate())
* then we will accept the UID+GID sent by the client during write for
* initializing the ownership of this inode. We only allow this to
}
EXIT;
+
out_unlock:
+ if (page)
+ page_cache_release(page);
+
if (ia_valid & (ATTR_SIZE | ATTR_UID | ATTR_GID))
UNLOCK_INODE_MUTEX(inode);
if (ia_valid & ATTR_SIZE)