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_vfs_single.c
diff --git
a/yaffs_vfs_single.c
b/yaffs_vfs_single.c
index f8228457e18697ddfd73900d29fca6736fb578a1..19ced5f021f7ce7e450f2dad07bf5bb9012f927a 100644
(file)
--- a/
yaffs_vfs_single.c
+++ b/
yaffs_vfs_single.c
@@
-42,7
+42,6
@@
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/proc_fs.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/proc_fs.h>
-#include <linux/smp_lock.h>
#include <linux/pagemap.h>
#include <linux/mtd/mtd.h>
#include <linux/interrupt.h>
#include <linux/pagemap.h>
#include <linux/mtd/mtd.h>
#include <linux/interrupt.h>
@@
-307,7
+306,7
@@
static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
obj);
if (link) {
obj);
if (link) {
-
old_dentry->d_inode->i_nlink = yaffs_get_obj_link_count(obj
);
+
set_nlink(old_dentry->d_inode, yaffs_get_obj_link_count(obj)
);
d_instantiate(dentry, old_dentry->d_inode);
atomic_inc(&old_dentry->d_inode->i_count);
yaffs_trace(YAFFS_TRACE_OS,
d_instantiate(dentry, old_dentry->d_inode);
atomic_inc(&old_dentry->d_inode->i_count);
yaffs_trace(YAFFS_TRACE_OS,
@@
-338,6
+337,14
@@
static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
yaffs_trace(YAFFS_TRACE_OS, "yaffs_symlink");
yaffs_trace(YAFFS_TRACE_OS, "yaffs_symlink");
+ if (strnlen(dentry->d_name.name, YAFFS_MAX_NAME_LENGTH + 1) >
+ YAFFS_MAX_NAME_LENGTH)
+ return -ENAMETOOLONG;
+
+ if (strnlen(symname, YAFFS_MAX_ALIAS_LENGTH + 1) >
+ YAFFS_MAX_ALIAS_LENGTH)
+ return -ENAMETOOLONG;
+
dev = yaffs_inode_to_obj(dir)->my_dev;
yaffs_gross_lock(dev);
obj = yaffs_create_symlink(yaffs_inode_to_obj(dir), dentry->d_name.name,
dev = yaffs_inode_to_obj(dir)->my_dev;
yaffs_gross_lock(dev);
obj = yaffs_create_symlink(yaffs_inode_to_obj(dir), dentry->d_name.name,
@@
-419,10
+426,9
@@
static int yaffs_unlink(struct inode *dir, struct dentry *dentry)
ret_val = yaffs_unlinker(obj, dentry->d_name.name);
if (ret_val == YAFFS_OK) {
ret_val = yaffs_unlinker(obj, dentry->d_name.name);
if (ret_val == YAFFS_OK) {
-
dentry->d_inode->i_nlink--
;
+
inode_dec_link_count(dentry->d_inode)
;
dir->i_version++;
yaffs_gross_unlock(dev);
dir->i_version++;
yaffs_gross_unlock(dev);
- mark_inode_dirty(dentry->d_inode);
update_dir_time(dir);
return 0;
}
update_dir_time(dir);
return 0;
}
@@
-430,7
+436,7
@@
static int yaffs_unlink(struct inode *dir, struct dentry *dentry)
return -ENOTEMPTY;
}
return -ENOTEMPTY;
}
-static int yaffs_sync_object(struct file *file, int datasync)
+static int yaffs_sync_object(struct file *file,
loff_t start, loff_t end,
int datasync)
{
struct yaffs_obj *obj;
{
struct yaffs_obj *obj;
@@
-486,10
+492,8
@@
static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
yaffs_gross_unlock(dev);
if (ret_val == YAFFS_OK) {
yaffs_gross_unlock(dev);
if (ret_val == YAFFS_OK) {
- if (target) {
- new_dentry->d_inode->i_nlink--;
- mark_inode_dirty(new_dentry->d_inode);
- }
+ if (target)
+ inode_dec_link_count(new_dentry->d_inode);
update_dir_time(old_dir);
if (old_dir != new_dir)
update_dir_time(old_dir);
if (old_dir != new_dir)
@@
-1093,12
+1097,14
@@
static int yaffs_readpage_nolock(struct file *f, struct page *pg)
unsigned char *pg_buf;
int ret;
struct yaffs_dev *dev;
unsigned char *pg_buf;
int ret;
struct yaffs_dev *dev;
+ loff_t pos = ((loff_t) pg->index) << PAGE_CACHE_SHIFT;
yaffs_trace(YAFFS_TRACE_OS,
yaffs_trace(YAFFS_TRACE_OS,
- "yaffs_readpage_nolock at %
08x
, size %08x",
- (
unsigned)(pg->index << PAGE_CACHE_SHIFT)
,
+ "yaffs_readpage_nolock at %
lld
, size %08x",
+ (
long long)pos
,
(unsigned)PAGE_CACHE_SIZE);
(unsigned)PAGE_CACHE_SIZE);
+
obj = yaffs_dentry_to_obj(f->f_dentry);
dev = obj->my_dev;
obj = yaffs_dentry_to_obj(f->f_dentry);
dev = obj->my_dev;
@@
-1110,8
+1116,7
@@
static int yaffs_readpage_nolock(struct file *f, struct page *pg)
yaffs_gross_lock(dev);
yaffs_gross_lock(dev);
- ret = yaffs_file_rd(obj, pg_buf,
- pg->index << PAGE_CACHE_SHIFT, PAGE_CACHE_SIZE);
+ ret = yaffs_file_rd(obj, pg_buf, pos, PAGE_CACHE_SIZE);
yaffs_gross_unlock(dev);
yaffs_gross_unlock(dev);
@@
-1214,7
+1219,7
@@
static int yaffs_writepage(struct page *page, struct writeback_control *wbc)
(int)obj->variant.file_variant.file_size, (int)inode->i_size);
n_written = yaffs_wr_file(obj, buffer,
(int)obj->variant.file_variant.file_size, (int)inode->i_size);
n_written = yaffs_wr_file(obj, buffer,
-
page->index
<< PAGE_CACHE_SHIFT, n_bytes, 0);
+
((loff_t)page->index)
<< PAGE_CACHE_SHIFT, n_bytes, 0);
yaffs_touch_super(dev);
yaffs_touch_super(dev);
@@
-1873,7
+1878,7
@@
static void yaffs_fill_inode_from_obj(struct inode *inode,
inode->i_ctime.tv_nsec = 0;
inode->i_size = yaffs_get_obj_length(obj);
inode->i_blocks = (inode->i_size + 511) >> 9;
inode->i_ctime.tv_nsec = 0;
inode->i_size = yaffs_get_obj_length(obj);
inode->i_blocks = (inode->i_size + 511) >> 9;
-
inode->i_nlink = yaffs_get_obj_link_count(obj
);
+
set_nlink(inode, yaffs_get_obj_link_count(obj)
);
yaffs_trace(YAFFS_TRACE_OS,
"yaffs_fill_inode mode %x uid %d gid %d size %d count %d",
inode->i_mode, inode->i_uid, inode->i_gid,
yaffs_trace(YAFFS_TRACE_OS,
"yaffs_fill_inode mode %x uid %d gid %d size %d count %d",
inode->i_mode, inode->i_uid, inode->i_gid,
@@
-2253,6
+2258,12
@@
static struct super_block *yaffs_internal_read_super(int yaffs_version,
if (!context->bg_thread)
param->defered_dir_update = 0;
if (!context->bg_thread)
param->defered_dir_update = 0;
+ sb->s_maxbytes = yaffs_max_file_size(dev);
+
+ yaffs_trace(YAFFS_TRACE_OS,
+ "yaffs_readpage_nolock at %lld, size %08x",
+ (long long)pos,
+ (unsigned)PAGE_CACHE_SIZE);
/* Release lock before yaffs_get_inode() */
yaffs_gross_unlock(dev);
/* Release lock before yaffs_get_inode() */
yaffs_gross_unlock(dev);
@@
-2292,19
+2303,18
@@
static int yaffs_internal_read_super_mtd(struct super_block *sb, void *data,
return yaffs_internal_read_super(1, sb, data, silent) ? 0 : -EINVAL;
}
return yaffs_internal_read_super(1, sb, data, silent) ? 0 : -EINVAL;
}
-static
int yaffs_read_super
(struct file_system_type *fs,
+static
struct dentry *yaffs_mount
(struct file_system_type *fs,
int flags, const char *dev_name,
int flags, const char *dev_name,
- void *data
, struct vfsmount *mnt
)
+ void *data)
{
{
-
- return get_sb_bdev(fs, flags, dev_name, data,
- yaffs_internal_read_super_mtd, mnt);
+ return mount_bdev(fs, flags, dev_name, data,
+ yaffs_internal_read_super_mtd);
}
static struct file_system_type yaffs_fs_type = {
.owner = THIS_MODULE,
.name = "yaffs",
}
static struct file_system_type yaffs_fs_type = {
.owner = THIS_MODULE,
.name = "yaffs",
- .
get_sb = yaffs_read_super
,
+ .
mount = yaffs_mount
,
.kill_sb = kill_block_super,
.fs_flags = FS_REQUIRES_DEV,
};
.kill_sb = kill_block_super,
.fs_flags = FS_REQUIRES_DEV,
};
@@
-2315,18
+2325,17
@@
static int yaffs2_internal_read_super_mtd(struct super_block *sb, void *data,
return yaffs_internal_read_super(2, sb, data, silent) ? 0 : -EINVAL;
}
return yaffs_internal_read_super(2, sb, data, silent) ? 0 : -EINVAL;
}
-static int yaffs2_read_super(struct file_system_type *fs,
- int flags, const char *dev_name, void *data,
- struct vfsmount *mnt)
+static struct dentry *yaffs2_mount(struct file_system_type *fs,
+ int flags, const char *dev_name, void *data)
{
{
- return
get_sb
_bdev(fs, flags, dev_name, data,
- yaffs2_internal_read_super_mtd
, mnt
);
+ return
mount
_bdev(fs, flags, dev_name, data,
+ yaffs2_internal_read_super_mtd);
}
static struct file_system_type yaffs2_fs_type = {
.owner = THIS_MODULE,
.name = "yaffs2",
}
static struct file_system_type yaffs2_fs_type = {
.owner = THIS_MODULE,
.name = "yaffs2",
- .
get_sb = yaffs2_read_super
,
+ .
mount = yaffs2_mount
,
.kill_sb = kill_block_super,
.fs_flags = FS_REQUIRES_DEV,
};
.kill_sb = kill_block_super,
.fs_flags = FS_REQUIRES_DEV,
};
@@
-2364,8
+2373,9
@@
static char *yaffs_dump_dev_part0(char *buf, struct yaffs_dev *dev)
static char *yaffs_dump_dev_part1(char *buf, struct yaffs_dev *dev)
{
static char *yaffs_dump_dev_part1(char *buf, struct yaffs_dev *dev)
{
- buf +=
- sprintf(buf, "data_bytes_per_chunk.. %d\n",
+ buf += sprintf(buf, "max file size......... %lld\n",
+ (long long) yaffs_max_file_size(dev));
+ buf += sprintf(buf, "data_bytes_per_chunk.. %d\n",
dev->data_bytes_per_chunk);
buf += sprintf(buf, "chunk_grp_bits........ %d\n", dev->chunk_grp_bits);
buf += sprintf(buf, "chunk_grp_size........ %d\n", dev->chunk_grp_size);
dev->data_bytes_per_chunk);
buf += sprintf(buf, "chunk_grp_bits........ %d\n", dev->chunk_grp_bits);
buf += sprintf(buf, "chunk_grp_size........ %d\n", dev->chunk_grp_size);