diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/Makefile.am | 18 | ||||
-rw-r--r-- | kernel/dir.c | 15 |
2 files changed, 22 insertions, 11 deletions
diff --git a/kernel/Makefile.am b/kernel/Makefile.am index cefcf63..4edce67 100644 --- a/kernel/Makefile.am +++ b/kernel/Makefile.am @@ -2,15 +2,25 @@ EXTRA_DIST = dev.c dir.c file.c inode.c util.c fuse_i.h +CC = @CC@ +CFLAGS = -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -pipe +CPPFAGS = -I@KERNINCLUDE@ -I../include -D__KERNEL__ -DMODULE -D_LOOSE_KERNEL_NAMES +INSTALL = @INSTALL@ +fusemoduledir = @kmoduledir@/kernel/fs/fuse + +SUFFIXES = .c .o .s + + all-local: fuse.o +install-exec-local: fuse.o + $(mkinstalldirs) $(DESTDIR)$(fusemoduledir) + $(INSTALL) -m 644 fuse.o $(DESTDIR)$(fusemoduledir)/fuse.o + /sbin/depmod -a + clean-local: rm -f *.o *.s -CFLAGS = -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -pipe -CPPFAGS = -I@KERNINCLUDE@ -I../include -D__KERNEL__ -DMODULE -D_LOOSE_KERNEL_NAMES - -SUFFIXES = .c .o .s .c.o: $(CC) $(CFLAGS) $(CPPFAGS) -c $< diff --git a/kernel/dir.c b/kernel/dir.c index a4018ca..87f7241 100644 --- a/kernel/dir.c +++ b/kernel/dir.c @@ -19,7 +19,8 @@ static struct file_operations fuse_dir_operations; static struct dentry_operations fuse_dentry_opertations; -#define FUSE_REVALIDATE_TIME (HZ / 100) +/* FIXME: This should be user configurable */ +#define FUSE_REVALIDATE_TIME (1 * HZ) static void change_attributes(struct inode *inode, struct fuse_attr *attr) { @@ -528,13 +529,13 @@ static int fuse_setattr(struct dentry *entry, struct iattr *attr) out.arg = &outarg; request_send(fc, &in, &out); - if(!out.h.error && (attr->ia_valid & ATTR_SIZE)) { - if(outarg.newsize > attr->ia_size) - outarg.newsize = attr->ia_size; - - vmtruncate(inode, outarg.newsize); - } + if(!out.h.error) { + if(attr->ia_valid & ATTR_SIZE && + outarg.attr.size < inode->i_size) + vmtruncate(inode, outarg.attr.size); + change_attributes(inode, &outarg.attr); + } return out.h.error; } |