projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of ssh://www.aleph1.co.uk/home/aleph1/git/yaffs2
[yaffs2.git]
/
yaffs_fs.c
diff --git
a/yaffs_fs.c
b/yaffs_fs.c
index dfb5461d49f135825676e306edf36ffdb5799a73..ecf2bbe4d48bc458fff4396e663b8b1bc8a3e781 100644
(file)
--- a/
yaffs_fs.c
+++ b/
yaffs_fs.c
@@
-43,6
+43,7
@@
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,35))
#define YAFFS_USE_SETATTR_COPY
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,35))
#define YAFFS_USE_SETATTR_COPY
+#define YAFFS_USE_TRUNCATE_SETSIZE
#endif
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,35))
#define YAFFS_HAS_EVICT_INODE
#endif
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,35))
#define YAFFS_HAS_EVICT_INODE
@@
-116,6
+117,12
@@
#define YPROC_ROOT NULL
#endif
#define YPROC_ROOT NULL
#endif
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
+#define Y_INIT_TIMER(a) init_timer(a)
+#else
+#define Y_INIT_TIMER(a) init_timer_on_stack(a)
+#endif
+
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
#define WRITE_SIZE_STR "writesize"
#define WRITE_SIZE(mtd) ((mtd)->writesize)
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
#define WRITE_SIZE_STR "writesize"
#define WRITE_SIZE(mtd) ((mtd)->writesize)
@@
-479,6
+486,17
@@
static int yaffs_vfs_setattr(struct inode *inode, struct iattr *attr)
}
}
+static int yaffs_vfs_setsize(struct inode *inode, loff_t newsize)
+{
+#ifdef YAFFS_USE_TRUNCATE_SETSIZE
+ truncate_setsize(inode,newsize);
+ return 0;
+#else
+ return simple_setsize(inode, newsize);
+#endif
+
+}
+
static unsigned yaffs_gc_control_callback(yaffs_Device *dev)
{
return yaffs_gc_control;
static unsigned yaffs_gc_control_callback(yaffs_Device *dev)
{
return yaffs_gc_control;
@@
-858,6
+876,7
@@
static void yaffs_evict_inode( struct inode *inode)
if (!inode->i_nlink && !is_bad_inode(inode))
deleteme = 1;
truncate_inode_pages(&inode->i_data,0);
if (!inode->i_nlink && !is_bad_inode(inode))
deleteme = 1;
truncate_inode_pages(&inode->i_data,0);
+ end_writeback(inode);
if(deleteme && obj){
dev = obj->myDev;
if(deleteme && obj){
dev = obj->myDev;
@@
-865,7
+884,6
@@
static void yaffs_evict_inode( struct inode *inode)
yaffs_DeleteObject(obj);
yaffs_GrossUnlock(dev);
}
yaffs_DeleteObject(obj);
yaffs_GrossUnlock(dev);
}
- end_writeback(inode);
if (obj) {
dev = obj->myDev;
yaffs_GrossLock(dev);
if (obj) {
dev = obj->myDev;
yaffs_GrossLock(dev);
@@
-1967,8
+1985,10
@@
static int yaffs_setattr(struct dentry *dentry, struct iattr *attr)
if (!error){
error = yaffs_vfs_setattr(inode, attr);
T(YAFFS_TRACE_OS,(TSTR("inode_setattr called\n")));
if (!error){
error = yaffs_vfs_setattr(inode, attr);
T(YAFFS_TRACE_OS,(TSTR("inode_setattr called\n")));
- if (attr->ia_valid & ATTR_SIZE)
- truncate_inode_pages(&inode->i_data,attr->ia_size);
+ if (attr->ia_valid & ATTR_SIZE){
+ yaffs_vfs_setsize(inode,attr->ia_size);
+ inode->i_blocks = (inode->i_size + 511) >> 9;
+ }
}
dev = yaffs_InodeToObject(inode)->myDev;
if (attr->ia_valid & ATTR_SIZE){
}
dev = yaffs_InodeToObject(inode)->myDev;
if (attr->ia_valid & ATTR_SIZE){
@@
-2034,9
+2054,8
@@
ssize_t yaffs_getxattr(struct dentry *dentry, const char *name, void *buff,
yaffs_Object *obj = yaffs_InodeToObject(inode);
T(YAFFS_TRACE_OS,
yaffs_Object *obj = yaffs_InodeToObject(inode);
T(YAFFS_TRACE_OS,
- (TSTR("yaffs_getxattr of object %d\n"),
- obj->objectId));
-
+ (TSTR("yaffs_getxattr \"%s\" from object %d\n"),
+ name, obj->objectId));
if (error == 0) {
dev = obj->myDev;
if (error == 0) {
dev = obj->myDev;
@@
-2345,7
+2364,7
@@
static int yaffs_BackgroundThread(void *data)
if(time_before(expires,now))
expires = now + HZ;
if(time_before(expires,now))
expires = now + HZ;
-
init_timer_on_stack
(&timer);
+
Y_INIT_TIMER
(&timer);
timer.expires = expires+1;
timer.data = (unsigned long) current;
timer.function = yaffs_background_waker;
timer.expires = expires+1;
timer.data = (unsigned long) current;
timer.function = yaffs_background_waker;