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
many changes: seems ok on 2.4.9
[fs/lustre-release.git]
/
lustre
/
obdfs
/
file.c
diff --git
a/lustre/obdfs/file.c
b/lustre/obdfs/file.c
index
4bb4e74
..
f6abf6f
100644
(file)
--- a/
lustre/obdfs/file.c
+++ b/
lustre/obdfs/file.c
@@
-37,6
+37,7
@@
#include <linux/obd_support.h>
#include <linux/obdfs.h>
#include <linux/obd_support.h>
#include <linux/obdfs.h>
+extern int obdfs_setattr(struct dentry *de, struct iattr *attr);
void obdfs_change_inode(struct inode *inode);
static inline void obdfs_remove_suid(struct inode *inode)
void obdfs_change_inode(struct inode *inode);
static inline void obdfs_remove_suid(struct inode *inode)
@@
-50,7
+51,8
@@
static inline void obdfs_remove_suid(struct inode *inode)
mode &= inode->i_mode;
if (mode && !capable(CAP_FSETID)) {
inode->i_mode &= ~mode;
mode &= inode->i_mode;
if (mode && !capable(CAP_FSETID)) {
inode->i_mode &= ~mode;
- obdfs_change_inode(inode);
+ // XXX careful here - we cannot change the size
+ //obdfs_change_inode(inode);
}
}
}
}
@@
-66,23
+68,35
@@
obdfs_file_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
retval = generic_file_write(file, buf, count, ppos);
CDEBUG(D_INFO, "Wrote %d\n", retval);
retval = generic_file_write(file, buf, count, ppos);
CDEBUG(D_INFO, "Wrote %d\n", retval);
+
+ /* update mtime/ctime/atime here, NOT size */
if (retval > 0) {
if (retval > 0) {
- struct inode *inode = file->f_dentry->d_inode;
- obdfs_remove_suid(inode);
- inode->i_ctime = inode->i_mtime = CURRENT_TIME;
- obdfs_change_inode(inode);
+ struct iattr attr;
+ attr.ia_valid = ATTR_MTIME | ATTR_CTIME | ATTR_ATIME;
+ attr.ia_mtime = attr.ia_ctime = attr.ia_atime =
+ CURRENT_TIME;
+ obdfs_setattr(file->f_dentry, &attr);
}
EXIT;
return retval;
}
}
EXIT;
return retval;
}
+
+/* XXX this does not need to do anything for data, it _does_ need to
+ call setattr */
+int obdfs_fsync(struct file *file, struct dentry *dentry, int data)
+{
+ return 0;
+}
+
struct file_operations obdfs_file_operations = {
struct file_operations obdfs_file_operations = {
- read: generic_file_read, /* read */
- write: obdfs_file_write, /* write */
- mmap: generic_file_mmap, /* mmap */
+ read: generic_file_read,
+ write: obdfs_file_write,
+ mmap: generic_file_mmap,
+ fsync: NULL
};
};
-extern int obdfs_setattr(struct dentry *de, struct iattr *attr);
+
struct inode_operations obdfs_file_inode_operations = {
truncate: obdfs_truncate,
setattr: obdfs_setattr
struct inode_operations obdfs_file_inode_operations = {
truncate: obdfs_truncate,
setattr: obdfs_setattr