Merge commit 'AU_LINUX_ANDROID_ICS.04.00.04.00.126' into msm-3.4
AU_LINUX_ANDROID_ICS.04.00.04.00.126 from msm-3.0.
First parent is from google/android-3.4.
* commit 'AU_LINUX_ANDROID_ICS.04.00.04.00.126': (8712 commits)
PRNG: Device tree entry for qrng device.
vidc:1080p: Set video core timeout value for Thumbnail mode
msm: sps: improve the debugging support in SPS driver
board-8064 msm: Overlap secure and non secure video firmware heaps.
msm: clock: Add handoff ops for 7x30 and copper XO clocks
msm_fb: display: Wait for external vsync before DTV IOMMU unmap
msm: Fix ciruclar dependency in debug UART settings
msm: gdsc: Add GDSC regulator driver for msm-copper
defconfig: Enable Mobicore Driver.
mobicore: Add mobicore driver.
mobicore: rename variable to lower case.
mobicore: rename folder.
mobicore: add makefiles
mobicore: initial import of kernel driver
ASoC: msm: Add SLIMBUS_2_RX CPU DAI
board-8064-gpio: Update FUNC for EPM SPI CS
msm_fb: display: Remove chicken bit config during video playback
mmc: msm_sdcc: enable the sanitize capability
msm-fb: display: lm2 writeback support on mpq platfroms
msm_fb: display: Disable LVDS phy & pll during panel off
...
Signed-off-by: Steve Muckle <smuckle@codeaurora.org>
diff --git a/fs/yaffs2/yaffs_vfs.c b/fs/yaffs2/yaffs_vfs.c
index d5b8753..8e8c55b 100644
--- a/fs/yaffs2/yaffs_vfs.c
+++ b/fs/yaffs2/yaffs_vfs.c
@@ -43,7 +43,6 @@
#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>
@@ -54,6 +53,7 @@
#include <linux/kthread.h>
#include <linux/delay.h>
#include <linux/freezer.h>
+#include <linux/cleancache.h>
#include <asm/div64.h>
@@ -66,7 +66,7 @@
#define YPROC_ROOT NULL
-#define Y_INIT_TIMER(a) init_timer_on_stack(a)
+#define Y_INIT_TIMER(a, b, c) setup_deferrable_timer_on_stack(a, b, c)
#define WRITE_SIZE_STR "writesize"
#define WRITE_SIZE(mtd) ((mtd)->writesize)
@@ -202,7 +202,7 @@
return inode;
}
-static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
+static int yaffs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
dev_t rdev)
{
struct inode *inode;
@@ -282,12 +282,12 @@
return error;
}
-static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
+static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
{
return yaffs_mknod(dir, dentry, mode | S_IFDIR, 0);
}
-static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode,
+static int yaffs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
struct nameidata *n)
{
return yaffs_mknod(dir, dentry, mode | S_IFREG, 0);
@@ -314,7 +314,7 @@
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,
@@ -429,7 +429,7 @@
ret_val = yaffs_unlinker(obj, dentry->d_name.name);
if (ret_val == YAFFS_OK) {
- dentry->d_inode->i_nlink--;
+ drop_nlink(dentry->d_inode);
dir->i_version++;
yaffs_gross_unlock(dev);
mark_inode_dirty(dentry->d_inode);
@@ -440,7 +440,7 @@
return -ENOTEMPTY;
}
-static int yaffs_sync_object(struct file *file, int datasync)
+static int yaffs_sync_object(struct file *file, loff_t a, loff_t b, int datasync)
{
struct yaffs_obj *obj;
@@ -497,7 +497,7 @@
if (ret_val == YAFFS_OK) {
if (target) {
- new_dentry->d_inode->i_nlink--;
+ drop_nlink(new_dentry->d_inode);
mark_inode_dirty(new_dentry->d_inode);
}
@@ -1140,6 +1140,10 @@
(unsigned)(pg->index << PAGE_CACHE_SHIFT),
(unsigned)PAGE_CACHE_SIZE);
+ ret = cleancache_get_page(pg);
+ if (!ret)
+ goto cleancache_got;
+
obj = yaffs_dentry_to_obj(f->f_dentry);
dev = obj->my_dev;
@@ -1159,11 +1163,13 @@
if (ret >= 0)
ret = 0;
+cleancache_got:
if (ret) {
ClearPageUptodate(pg);
SetPageError(pg);
} else {
SetPageUptodate(pg);
+ SetPageMappedToDisk(pg);
ClearPageError(pg);
}
@@ -1675,10 +1681,9 @@
if (time_before(expires, now))
expires = now + HZ;
- Y_INIT_TIMER(&timer);
+ Y_INIT_TIMER(&timer, yaffs_background_waker,
+ (unsigned long)current);
timer.expires = expires + 1;
- timer.data = (unsigned long)current;
- timer.function = yaffs_background_waker;
set_current_state(TASK_INTERRUPTIBLE);
add_timer(&timer);
@@ -1917,7 +1922,7 @@
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",
@@ -1992,8 +1997,7 @@
{
struct mtd_info *mtd = yaffs_dev_to_mtd(yaffs_super_to_dev(sb));
- if (mtd->sync)
- mtd->sync(mtd);
+ mtd_sync(mtd);
put_mtd_device(mtd);
}
@@ -2094,13 +2098,13 @@
return NULL;
}
- yaffs_trace(YAFFS_TRACE_OS, " erase %p", mtd->erase);
- yaffs_trace(YAFFS_TRACE_OS, " read %p", mtd->read);
- yaffs_trace(YAFFS_TRACE_OS, " write %p", mtd->write);
- yaffs_trace(YAFFS_TRACE_OS, " readoob %p", mtd->read_oob);
- yaffs_trace(YAFFS_TRACE_OS, " writeoob %p", mtd->write_oob);
- yaffs_trace(YAFFS_TRACE_OS, " block_isbad %p", mtd->block_isbad);
- yaffs_trace(YAFFS_TRACE_OS, " block_markbad %p", mtd->block_markbad);
+ yaffs_trace(YAFFS_TRACE_OS, " erase %p", mtd->_erase);
+ yaffs_trace(YAFFS_TRACE_OS, " read %p", mtd->_read);
+ yaffs_trace(YAFFS_TRACE_OS, " write %p", mtd->_write);
+ yaffs_trace(YAFFS_TRACE_OS, " readoob %p", mtd->_read_oob);
+ yaffs_trace(YAFFS_TRACE_OS, " writeoob %p", mtd->_write_oob);
+ yaffs_trace(YAFFS_TRACE_OS, " block_isbad %p", mtd->_block_isbad);
+ yaffs_trace(YAFFS_TRACE_OS, " block_markbad %p", mtd->_block_markbad);
yaffs_trace(YAFFS_TRACE_OS, " %s %d", WRITE_SIZE_STR, WRITE_SIZE(mtd));
yaffs_trace(YAFFS_TRACE_OS, " oobsize %d", mtd->oobsize);
yaffs_trace(YAFFS_TRACE_OS, " erasesize %d", mtd->erasesize);
@@ -2123,11 +2127,11 @@
if (yaffs_version == 2) {
/* Check for version 2 style functions */
- if (!mtd->erase ||
- !mtd->block_isbad ||
- !mtd->block_markbad ||
- !mtd->read ||
- !mtd->write || !mtd->read_oob || !mtd->write_oob) {
+ if (!mtd->_erase ||
+ !mtd->_block_isbad ||
+ !mtd->_block_markbad ||
+ !mtd->_read ||
+ !mtd->_write || !mtd->_read_oob || !mtd->_write_oob) {
yaffs_trace(YAFFS_TRACE_ALWAYS,
"MTD device does not support required functions");
return NULL;
@@ -2142,9 +2146,9 @@
}
} else {
/* Check for V1 style functions */
- if (!mtd->erase ||
- !mtd->read ||
- !mtd->write || !mtd->read_oob || !mtd->write_oob) {
+ if (!mtd->_erase ||
+ !mtd->_read ||
+ !mtd->_write || !mtd->_read_oob || !mtd->_write_oob) {
yaffs_trace(YAFFS_TRACE_ALWAYS,
"MTD device does not support required functions");
return NULL;
@@ -2351,9 +2355,9 @@
yaffs_trace(YAFFS_TRACE_OS, "yaffs_read_super: got root inode");
- root = d_alloc_root(inode);
+ root = d_make_root(inode);
- yaffs_trace(YAFFS_TRACE_OS, "yaffs_read_super: d_alloc_root done");
+ yaffs_trace(YAFFS_TRACE_OS, "yaffs_read_super: d_make_root done");
if (!root) {
iput(inode);
@@ -2366,6 +2370,7 @@
dev->is_checkpointed);
yaffs_trace(YAFFS_TRACE_OS, "yaffs_read_super: done");
+ cleancache_init_fs(sb);
return sb;
}
@@ -2375,19 +2380,17 @@
return yaffs_internal_read_super(1, sb, data, silent) ? 0 : -EINVAL;
}
-static int yaffs_read_super(struct file_system_type *fs,
- int flags, const char *dev_name,
- void *data, struct vfsmount *mnt)
+static struct dentry *yaffs_mount(struct file_system_type *fs, int flags,
+ const char *dev_name, 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",
- .get_sb = yaffs_read_super,
+ .mount = yaffs_mount,
.kill_sb = kill_block_super,
.fs_flags = FS_REQUIRES_DEV,
};
@@ -2400,18 +2403,17 @@
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",
- .get_sb = yaffs2_read_super,
+ .mount = yaffs2_mount,
.kill_sb = kill_block_super,
.fs_flags = FS_REQUIRES_DEV,
};