projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rationalise stats gathering for nand access. Does not instrument mounting.
[yaffs2.git]
/
yaffs_fs.c
diff --git
a/yaffs_fs.c
b/yaffs_fs.c
index 7c04ed3a3de175076f27be67fdb3d995a617cda6..e4ed3bc7bf0c2ea7a7725c1f98c3fe0020bb2ed9 100644
(file)
--- a/
yaffs_fs.c
+++ b/
yaffs_fs.c
@@
-32,7
+32,7
@@
*/
const char *yaffs_fs_c_version =
*/
const char *yaffs_fs_c_version =
- "$Id: yaffs_fs.c,v 1.
79 2009-03-17 01:12:00 wookey
Exp $";
+ "$Id: yaffs_fs.c,v 1.
81 2009-05-26 01:22:44 charles
Exp $";
extern const char *yaffs_guts_c_version;
#include <linux/version.h>
extern const char *yaffs_guts_c_version;
#include <linux/version.h>
@@
-163,6
+163,11
@@
static struct inode *yaffs_iget(struct super_block *sb, unsigned long ino);
#define yaffs_SuperToDevice(sb) ((yaffs_Device *)sb->u.generic_sbp)
#endif
#define yaffs_SuperToDevice(sb) ((yaffs_Device *)sb->u.generic_sbp)
#endif
+
+#define update_dir_time(dir) do {\
+ (dir)->i_ctime = (dir)->i_mtime = CURRENT_TIME; \
+ } while(0)
+
static void yaffs_put_super(struct super_block *sb);
static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
static void yaffs_put_super(struct super_block *sb);
static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
@@
-1075,7
+1080,7
@@
static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
}
yaffs_GrossUnlock(dev);
}
yaffs_GrossUnlock(dev);
- return
nWritten == 0
? -ENOSPC : nWritten;
+ return
(nWritten == 0) && (n > 0)
? -ENOSPC : nWritten;
}
/* Space holding and freeing is done to ensure we have space available for write_begin/end */
}
/* Space holding and freeing is done to ensure we have space available for write_begin/end */
@@
-1286,6
+1291,7
@@
static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
if (obj) {
inode = yaffs_get_inode(dir->i_sb, mode, rdev, obj);
d_instantiate(dentry, inode);
if (obj) {
inode = yaffs_get_inode(dir->i_sb, mode, rdev, obj);
d_instantiate(dentry, inode);
+ update_dir_time(dir);
T(YAFFS_TRACE_OS,
("yaffs_mknod created object %d count = %d\n",
obj->objectId, atomic_read(&inode->i_count)));
T(YAFFS_TRACE_OS,
("yaffs_mknod created object %d count = %d\n",
obj->objectId, atomic_read(&inode->i_count)));
@@
-1339,6
+1345,7
@@
static int yaffs_unlink(struct inode *dir, struct dentry *dentry)
dir->i_version++;
yaffs_GrossUnlock(dev);
mark_inode_dirty(dentry->d_inode);
dir->i_version++;
yaffs_GrossUnlock(dev);
mark_inode_dirty(dentry->d_inode);
+ update_dir_time(dir);
return 0;
}
yaffs_GrossUnlock(dev);
return 0;
}
yaffs_GrossUnlock(dev);
@@
-1379,8
+1386,10
@@
static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
yaffs_GrossUnlock(dev);
yaffs_GrossUnlock(dev);
- if (link)
+ if (link){
+ update_dir_time(dir);
return 0;
return 0;
+ }
return -EPERM;
}
return -EPERM;
}
@@
-1406,6
+1415,7
@@
static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
d_instantiate(dentry, inode);
inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
d_instantiate(dentry, inode);
+ update_dir_time(dir);
T(YAFFS_TRACE_OS, ("symlink created OK\n"));
return 0;
} else {
T(YAFFS_TRACE_OS, ("symlink created OK\n"));
return 0;
} else {
@@
-1478,7
+1488,10
@@
static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
new_dentry->d_inode->i_nlink--;
mark_inode_dirty(new_dentry->d_inode);
}
new_dentry->d_inode->i_nlink--;
mark_inode_dirty(new_dentry->d_inode);
}
-
+
+ update_dir_time(old_dir);
+ if(old_dir != new_dir)
+ update_dir_time(new_dir);
return 0;
} else {
return -ENOTEMPTY;
return 0;
} else {
return -ENOTEMPTY;