]> git.neil.brown.name Git - history.git/commitdiff
Import 2.3.9pre1 2.3.9pre1
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:25:44 +0000 (15:25 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:25:44 +0000 (15:25 -0500)
66 files changed:
Makefile
arch/i386/kernel/mca.c
arch/i386/kernel/mtrr.c
arch/ppc/kernel/ppc_htab.c
arch/sparc64/kernel/binfmt_aout32.c
arch/sparc64/kernel/sys_sparc32.c
drivers/ap1000/ringbuf.c
drivers/block/ll_rw_blk.c
drivers/char/ftape/lowlevel/ftape-proc.c
drivers/char/serial.c
drivers/pci/proc.c
drivers/zorro/proc.c
fs/adfs/dir.c
fs/adfs/file.c
fs/affs/dir.c
fs/affs/file.c
fs/affs/symlink.c
fs/autofs/dir.c
fs/autofs/root.c
fs/autofs/symlink.c
fs/buffer.c
fs/coda/dir.c
fs/coda/file.c
fs/coda/pioctl.c
fs/coda/symlink.c
fs/devices.c
fs/devpts/root.c
fs/efs/dir.c
fs/efs/file.c
fs/efs/symlink.c
fs/fat/file.c
fs/hfs/dir_cap.c
fs/hfs/dir_dbl.c
fs/hfs/dir_nat.c
fs/hfs/file.c
fs/hfs/file_cap.c
fs/hfs/file_hdr.c
fs/hpfs/inode.c
fs/isofs/dir.c
fs/isofs/file.c
fs/isofs/symlink.c
fs/minix/dir.c
fs/minix/file.c
fs/minix/symlink.c
fs/msdos/namei.c
fs/ncpfs/dir.c
fs/ncpfs/file.c
fs/ncpfs/symlink.c
fs/ntfs/fs.c
fs/proc/openpromfs.c
fs/qnx4/dir.c
fs/qnx4/file.c
fs/qnx4/symlinks.c
fs/romfs/inode.c
fs/smbfs/dir.c
fs/smbfs/file.c
fs/sysv/dir.c
fs/sysv/file.c
fs/sysv/symlink.c
fs/ufs/dir.c
fs/ufs/file.c
fs/ufs/symlink.c
fs/umsdos/dir.c
fs/umsdos/file.c
fs/umsdos/symlink.c
fs/vfat/namei.c

index 2c0238637eb6f1d3e9d7cb0f760d2c0216867996..2a8ea477cb1693e218e8b9bf79f6e18be54ca474 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 2
 PATCHLEVEL = 3
-SUBLEVEL = 8
+SUBLEVEL = 9
 EXTRAVERSION =
 
 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
index ae1980a42b92e9a140bf514a8602828c95d75531..571075d26f3411037674430107ed2a30ae05f63b 100644 (file)
@@ -142,9 +142,10 @@ static struct inode_operations proc_mca_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index 0d6c177919c9aad1602cd6c5f3aa501dc303dd46..0399caa79e124ede2429b8dfd56d07d877a3a9ff 100644 (file)
@@ -1459,11 +1459,14 @@ static struct inode_operations proc_mtrr_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static struct proc_dir_entry proc_root_mtrr = {
index 30123c07653c77b24aa24b4c17640566a88581b9..eba3f185431dc19bab6319a4fafc1158493227b4 100644 (file)
@@ -74,11 +74,14 @@ struct inode_operations proc_ppc_htab_inode_operations = {
     NULL,          /* rename      */
     NULL,          /* readlink    */
     NULL,          /* follow_link */
+    NULL,          /* bmap        */
     NULL,          /* readpage    */
     NULL,          /* writepage   */
-    NULL,          /* bmap        */
+    NULL,          /* flushpage   */
     NULL,          /* truncate    */
-    NULL           /* permission  */
+    NULL,          /* permission  */
+    NULL,          /* smap        */
+    NULL           /* revalidate  */
 };
 
 /* these will go into processor.h when I'm done debugging -- Cort */
index e852ca8f822740667b172ced3f35461d550f3832..7d638c5da33aaf03cdc51088e226a9a48a5c24b6 100644 (file)
@@ -55,8 +55,15 @@ static void set_brk(unsigned long start, unsigned long end)
  * These are the only things you should do on a core-file: use only these
  * macros to write out all the necessary info.
  */
-#define DUMP_WRITE(addr,nr) \
-while (file->f_op->write(file,(char *)(addr),(nr),&file->f_pos) != (nr)) goto close_coredump
+
+static int dump_write(struct file *file, const void *addr, int nr)
+{
+       return file->f_op->write(file, addr, nr, &file->f_pos) == nr;
+}
+
+#define DUMP_WRITE(addr, nr)   \
+       if (!dump_write(file, (void *)(addr), (nr))) \
+               goto close_coredump;
 
 #define DUMP_SEEK(offset) \
 if (file->f_op->llseek) { \
index 79ce3db45b63c906f10d95f54e8e4bd337d9888d..a4d6c7116bde93cc82696bd0cc1589e1c06ea8cb 100644 (file)
@@ -855,17 +855,15 @@ asmlinkage long sys32_readv(int fd, struct iovec32 *vector, u32 count)
        long ret = -EBADF;
 
        lock_kernel();
+
        file = fget(fd);
        if(!file)
                goto bad_file;
 
-       if(!(file->f_mode & 1))
-               goto out;
-
-       ret = do_readv_writev32(VERIFY_WRITE, file,
-                               vector, count);
-out:
+       if (file->f_op && file->f_op->read && (file->f_mode & FMODE_READ))
+               ret = do_readv_writev32(VERIFY_WRITE, file, vector, count);
        fput(file);
+
 bad_file:
        unlock_kernel();
        return ret;
@@ -877,19 +875,14 @@ asmlinkage long sys32_writev(int fd, struct iovec32 *vector, u32 count)
        int ret = -EBADF;
 
        lock_kernel();
+
        file = fget(fd);
        if(!file)
                goto bad_file;
-
-       if(!(file->f_mode & 2))
-               goto out;
-
-       down(&file->f_dentry->d_inode->i_sem);
-       ret = do_readv_writev32(VERIFY_READ, file,
-                               vector, count);
-       up(&file->f_dentry->d_inode->i_sem);
-out:
+       if (file->f_op && file->f_op->write && (file->f_mode & FMODE_WRITE))
+               ret = do_readv_writev32(VERIFY_READ, file, vector, count);
        fput(file);
+
 bad_file:
        unlock_kernel();
        return ret;
index ebce30e83eadeaee5ed65b7a671f7958e2e5e431..0efffa1de164b5becfe70a7f5726f402e845b172 100644 (file)
@@ -318,9 +318,12 @@ struct inode_operations proc_ringbuf_inode_operations = {
        NULL,                   /* mknod */
        NULL,                   /* rename */
        NULL,                   /* readlink */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
index 021d7a052d5aef3616b2e6d963784dd7201ce779..8485d4d4cc6bf081b4b19c2c4eb4d2d1e905b5e7 100644 (file)
@@ -322,8 +322,6 @@ void add_request(struct blk_dev_struct * dev, struct request * req)
        spin_lock_irqsave(&io_request_lock,flags);
        current_request = get_queue(req->rq_dev);
 
-       if (req->bh)
-               mark_buffer_clean(req->bh);
        if (!(tmp = *current_request)) {
                *current_request = req;
                if (dev->current_request != &dev->plug)
@@ -425,9 +423,13 @@ void make_request(int major,int rw, struct buffer_head * bh)
                        rw_ahead = 1;
                        rw = WRITE;     /* drop into WRITE */
                case WRITE:
-                       if (!buffer_dirty(bh))   /* Hmmph! Nothing to write */
-                               goto end_io;
-                       /* We don't allow the write-requests to fill up the
+                       if (!test_and_clear_bit(BH_Dirty, &bh->b_state))
+                               goto end_io;    /* Hmmph! Nothing to write */
+                       lock_kernel();
+                       refile_buffer(bh);
+                       unlock_kernel();
+                       /*
+                        * We don't allow the write-requests to fill up the
                         * queue completely:  we want some room for reads,
                         * as they take precedence. The last third of the
                         * requests are only for reads.
@@ -528,7 +530,6 @@ void make_request(int major,int rw, struct buffer_head * bh)
                        } else
                                continue;
 
-                       mark_buffer_clean(bh);
                        spin_unlock_irqrestore(&io_request_lock,flags);
                        return;
 
index ee21d92d405ab07f747c374c4ed17c91a0d1dade..80ec703511c7e1d79ce82ff664a1cf9cd2df6941 100644 (file)
@@ -112,11 +112,14 @@ static struct inode_operations ftape_proc_inode_operations =
        NULL,                   /* mknod */
        NULL,                   /* rename */
        NULL,                   /* readlink */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL,                   /* revalidate */
 };
 
 /*
index 7a3d4b5bcb88b6b2faff4fef4beecb2778e58d8a..487c0cb3933bba872db7b0a363d3439a54185e3e 100644 (file)
 #define RS_STROBE_TIME (10*HZ)
 #define RS_ISR_PASS_LIMIT 256
 
-#define IRQ_T(info) ((info->flags & ASYNC_SHARE_IRQ) ? SA_SHIRQ : SA_INTERRUPT)
+#define IRQ_T(state) \
+ ((state->flags & ASYNC_SHARE_IRQ) ? SA_SHIRQ : SA_INTERRUPT)
 
 #define SERIAL_INLINE
   
@@ -1003,7 +1004,7 @@ static int startup(struct async_struct * info)
                } else 
                        handler = rs_interrupt_single;
 
-               retval = request_irq(state->irq, handler, IRQ_T(info),
+               retval = request_irq(state->irq, handler, IRQ_T(state),
                                     "serial", NULL);
                if (retval) {
                        if (capable(CAP_SYS_ADMIN)) {
@@ -1168,7 +1169,7 @@ static void shutdown(struct async_struct * info)
                if (IRQ_ports[state->irq]) {
                        free_irq(state->irq, NULL);
                        retval = request_irq(state->irq, rs_interrupt_single,
-                                            IRQ_T(info), "serial", NULL);
+                                            IRQ_T(state), "serial", NULL);
                        
                        if (retval)
                                printk("serial shutdown: request_irq: error %d"
@@ -2017,7 +2018,7 @@ static int set_multiport_struct(struct async_struct * info,
                else
                        handler = rs_interrupt;
 
-               retval = request_irq(state->irq, handler, IRQ_T(info),
+               retval = request_irq(state->irq, handler, IRQ_T(state),
                                     "serial", NULL);
                if (retval) {
                        printk("Couldn't reallocate serial interrupt "
index d1a78fe53feb9364c6e395749b078daf8e33b746..75b637786524a1139984e177d58fc3a85a947bd0 100644 (file)
@@ -222,11 +222,14 @@ static struct inode_operations proc_bus_pci_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 int
index b208392a9ce470a6dac791b6870c6a286d11e120..e7e15140551328637de8a3cd530800dc8193c457 100644 (file)
@@ -89,11 +89,14 @@ static struct inode_operations proc_bus_zorro_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 int
index 738bb40b896af02e0ecbbfda5fce7aad9930377e..25a0eb4b4ddcd865024db2f7b4fb3c7c541817f2 100644 (file)
@@ -51,12 +51,14 @@ struct inode_operations adfs_dir_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* read link */
        NULL,                   /* follow link */
+       NULL,                   /* bmap */
        NULL,                   /* read page */
        NULL,                   /* write page */
-       NULL,                   /* bmap */
+       NULL,                   /* flush page */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 unsigned int adfs_val (unsigned char *p, int len)
index a886c68cee483c833fc6798fc1433f7c520dcd24..3963de876c155a9c0cd3403b7309c49350c49b18 100644 (file)
@@ -61,10 +61,12 @@ struct inode_operations adfs_file_inode_operations = {
        NULL,                   /* rename                       */
        NULL,                   /* readlink                     */
        NULL,                   /* follow_link                  */
-       generic_readpage,       /* readpage                     */
-       NULL,                   /* writepage                    */
        adfs_bmap,              /* bmap                         */
+       block_read_full_page,   /* readpage                     */
+       NULL,                   /* writepage                    */
+       NULL,                   /* flushpage                    */
        NULL,                   /* truncate                     */
        NULL,                   /* permission                   */
-       NULL                    /* smap                         */
+       NULL,                   /* smap                         */
+       NULL                    /* revalidate                   */
 };
index ee08ff451990723701736b8d20449e647f8302c0..206cc1ec85721ecfb9e9ddac329a3420cc394375 100644 (file)
@@ -57,9 +57,10 @@ struct inode_operations affs_dir_inode_operations = {
        affs_rename,            /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permissions */
        NULL,                   /* smap */
index bb1ce69c85d4a917087b70b04534cdda2f575a2f..8dbb341a01031ae72f4bca7bc97673339d62e6ee 100644 (file)
@@ -74,9 +74,10 @@ struct inode_operations affs_file_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       generic_readpage,       /* readpage */
-       NULL,                   /* writepage */
        affs_bmap,              /* bmap */
+       block_read_full_page,   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
        affs_truncate,          /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
@@ -114,9 +115,10 @@ struct inode_operations affs_file_inode_operations_ofs = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        affs_truncate,          /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index c3da66d4094bffae8d983380d722de0c4a7a6a36..9ab825b7f242ecfea46b0a9e7f1e2dc5819499d4 100644 (file)
@@ -35,12 +35,14 @@ struct inode_operations affs_symlink_inode_operations = {
        NULL,                   /* rename */
        affs_readlink,          /* readlink */
        affs_follow_link,       /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static int
index f6ccf84199774ab248be927fdea16bd08783ea71..1ab08339091330b42dfe7dd3ae76c001761efde8 100644 (file)
@@ -73,9 +73,10 @@ struct inode_operations autofs_dir_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index 011e3286f956c61de6cfea1c996cd0653c72b6bf..ab574e0fabad297b11c8f9f98646384251daeec7 100644 (file)
@@ -54,9 +54,10 @@ struct inode_operations autofs_root_inode_operations = {
         NULL,                   /* rename */
         NULL,                   /* readlink */
         NULL,                   /* follow_link */
+        NULL,                   /* bmap */
         NULL,                   /* readpage */
         NULL,                   /* writepage */
-        NULL,                   /* bmap */
+        NULL,                   /* flushpage */
         NULL,                   /* truncate */
         NULL,                  /* permission */
        NULL,                   /* smap */
index 0e46db36548056e2c8eac80db51f4a9077659883..545b0f5f797ec1f528efffbc36253a89c815317f 100644 (file)
@@ -49,9 +49,10 @@ struct inode_operations autofs_symlink_inode_operations = {
        NULL,                   /* rename */
        autofs_readlink,        /* readlink */
        autofs_follow_link,     /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index 9ffb8556a28cc229f213d0f81492b27fd0aa9547..dec22a3560e17390fe1f2e39f53c0b9ee834f0f9 100644 (file)
@@ -1539,9 +1539,11 @@ int block_write_partial_page (struct file *file, struct page *page, unsigned lon
                 * lots of dirty pages.
                 */
                if (!test_and_set_bit(BH_Dirty, &bh->b_state)) {
-                       __atomic_mark_buffer_dirty(bh, bdf_prm.b_un.age_buffer);
+                       lock_kernel();
+                       __mark_dirty(bh, 0);
                        if (too_many_dirty_buffers)
                                balance_dirty(bh->b_dev);
+                       unlock_kernel();
                }
 
 skip:
index b3c0195a3bea43e58182926a7b0743ecb5c4c504..a535eabd7c8e037a2e3b676fa5ef90250b4567aa 100644 (file)
@@ -77,9 +77,10 @@ struct inode_operations coda_dir_inode_operations =
        coda_rename,            /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        coda_permission,        /* permission */
        NULL,                   /* smap */
index cbc81542f5315534381c32f9e4db2653e656a9f8..000d441ae6052eb099a1afd269b04923b517f551 100644 (file)
@@ -47,13 +47,13 @@ struct inode_operations coda_file_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        coda_readpage,          /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
         coda_permission,        /* permission */
        NULL,                   /* smap */
-       NULL,                   /* update page */
         coda_revalidate_inode   /* revalidate */
 };
 
@@ -101,7 +101,7 @@ static int coda_readpage(struct file * coda_file, struct page * page)
         CDEBUG(D_INODE, "coda ino: %ld, cached ino %ld, page offset: %lx\n", 
               coda_inode->i_ino, cii->c_ovp->i_ino, page->offset);
 
-        generic_readpage(&cont_file, page);
+        block_read_full_page(&cont_file, page);
         EXIT;
         return 0;
 }
index 4a98361aa71cb1639be1d10835ee1a618ac7f586..ac0e704fb76b596a12443a9a6b96b6c1c1e9bb89 100644 (file)
@@ -46,13 +46,13 @@ struct inode_operations coda_ioctl_inode_operations =
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        coda_ioctl_permission,  /* permission */
        NULL,                   /* smap */
-       NULL,                   /* update page */
         NULL                    /* revalidate */
 };
 
index b42555811e4951a39726a9c3a8e9d969b2ecc32c..9d2f1e55ebf9f5f440427e3742c2dc30a359bea8 100644 (file)
@@ -42,13 +42,13 @@ struct inode_operations coda_symlink_inode_operations = {
        NULL,                   /* rename */
        coda_readlink,          /* readlink */
        coda_follow_link,       /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
-       NULL,                   /* update page */
         NULL                    /* revalidate */
 };
 
index 934fe290fd4aa11a28e1942d95fcdd9653a65414..fce05e09fdfd8a7089cb1d2c7e649d7514990282 100644 (file)
@@ -333,11 +333,14 @@ struct inode_operations chrdev_inode_operations = {
        NULL,                   /* mknod */
        NULL,                   /* rename */
        NULL,                   /* readlink */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 /*
index c1c1a600005b531b541d038ad195dc92abb664cd..cddac24c901052fe1d92193f484d9f167418a5d5 100644 (file)
@@ -51,9 +51,10 @@ struct inode_operations devpts_root_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index ea484dab479070b12970273e648ccbb3ef40c6c6..84a141b67bea54398b23af97d6ec6fe53ce51771 100644 (file)
@@ -38,12 +38,14 @@ struct inode_operations efs_dir_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       efs_bmap,               /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       efs_bmap,               /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static int efs_readdir(struct file *filp, void *dirent, filldir_t filldir) {
index d97a420c553902799cd6b6fe13fff0133152be30..8aa91f29c52566d3e35205ab2500cbec2431b578 100644 (file)
@@ -38,12 +38,14 @@ struct inode_operations efs_file_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       generic_readpage,       /* readpage */
-       NULL,                   /* writepage */
        efs_bmap,               /* bmap */
+       block_read_full_page,   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
  
 int efs_bmap(struct inode *inode, efs_block_t block) {
index 705599eb0566b4e8e081c839523bec226d43e94a..ac54f60344a096cff997949ebd6179677de089af 100644 (file)
@@ -26,12 +26,14 @@ struct inode_operations efs_symlink_inode_operations = {
        NULL,                   /* rename */
        efs_readlink,           /* readlink */
        efs_follow_link,        /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static char *efs_linktarget(struct inode *in, int *len) {
index 7c95181819f6185321c6e0e4e25ec7e52bce3cd8..94ea36adfa4ef914f54dd489328c0c9981c387ef 100644 (file)
@@ -57,12 +57,14 @@ struct inode_operations fat_file_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       generic_readpage,       /* readpage */
-       NULL,                   /* writepage */
        fat_bmap,               /* bmap */
+       block_read_full_page,   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
        fat_truncate,           /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 /* #Specification: msdos / special devices / mmap      
@@ -107,12 +109,14 @@ struct inode_operations fat_file_inode_operations_1024 = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       generic_readpage,       /* readpage */
-       NULL,                   /* writepage */
        NULL,                   /* bmap */
+       block_read_full_page,   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
        fat_truncate,           /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static struct file_operations fat_file_operations_readpage = {
@@ -142,12 +146,14 @@ struct inode_operations fat_file_inode_operations_readpage = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        fat_readpage,           /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        fat_truncate,           /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 #define MSDOS_PREFETCH 32
index 189b0107e1544688270f71fa37c9b4b1bbad4d2a..a60b057cae98a05d90c2d3b84f19f72ae52581cc 100644 (file)
@@ -87,12 +87,14 @@ struct inode_operations hfs_cap_ndir_inode_operations = {
        hfs_rename,             /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 struct inode_operations hfs_cap_fdir_inode_operations = {
@@ -108,12 +110,14 @@ struct inode_operations hfs_cap_fdir_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 struct inode_operations hfs_cap_rdir_inode_operations = {
@@ -129,12 +133,14 @@ struct inode_operations hfs_cap_rdir_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 /*================ File-local functions ================*/
index 17e53798a763aed61edc877b039a4b8aa61c1c8b..20c418c1a9375b21eb7c32d1ff244ccc039b904f 100644 (file)
@@ -86,12 +86,14 @@ struct inode_operations hfs_dbl_dir_inode_operations = {
        dbl_rename,             /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 
index 21d4ca9afdeebb1401cda0a018d82d541d8275dd..94292cd5d63bb4f8dbf0f08c5e8fd46c31d240b6 100644 (file)
@@ -93,9 +93,10 @@ struct inode_operations hfs_nat_ndir_inode_operations = {
        hfs_rename,             /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
@@ -115,9 +116,10 @@ struct inode_operations hfs_nat_hdir_inode_operations = {
        nat_hdr_rename,         /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index d3796e275a7328297f071d27ec76ca842142a76e..0ef1bd34c6b0d2f7e3ccf4fcd5e79a574c23fe5a 100644 (file)
@@ -63,9 +63,10 @@ struct inode_operations hfs_file_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       generic_readpage,       /* readpage */
-       NULL,                   /* writepage */
        hfs_bmap,               /* bmap */
+       block_read_full_page,   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
        hfs_file_truncate,      /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index 789073d196d76b4aa3b095366e8a81abdcd0cbbd..040369fd586b8c02b2b8e1b422c1eed27626b744 100644 (file)
@@ -77,9 +77,10 @@ struct inode_operations hfs_cap_info_inode_operations = {
        NULL,                           /* rename */
        NULL,                           /* readlink */
        NULL,                           /* follow_link */
+       NULL,                           /* bmap - none */
        NULL,                           /* readpage */
        NULL,                           /* writepage */
-       NULL,                           /* bmap - none */
+       NULL,                           /* flushpage */
        cap_info_truncate,              /* truncate */
        NULL,                           /* permission */
        NULL,                           /* smap */
index d112b34981b0e3c51415962f32dc81791a9e888c..e262136bb671c8b00575a0895714b87c3a80a034 100644 (file)
@@ -78,10 +78,11 @@ struct inode_operations hfs_hdr_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       NULL,                   /* readpage */
-       NULL,                   /* writepage */
        NULL,                   /* bmap - XXX: not available since
                                   header part has no disk block */
+       NULL,                   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
        hdr_truncate,           /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index 17984d667e3d78ef0ee9155950f712068cfba6e1..111b416d9204cf8f0cad6c91f1360703665a7edf 100644 (file)
@@ -41,10 +41,11 @@ static const struct inode_operations hpfs_file_iops =
        NULL,                           /* rename */
        NULL,                           /* readlink */
        NULL,                           /* follow_link */
-       generic_readpage,               /* readpage */
-       NULL,                           /* writepage */
        (int (*)(struct inode *, int))
        &hpfs_bmap,                     /* bmap */
+       block_read_full_page,           /* readpage */
+       NULL,                           /* writepage */
+       NULL,                           /* flushpage */
        &hpfs_truncate,                 /* truncate */
        NULL,                           /* permission */
        NULL,                           /* smap */
@@ -84,9 +85,10 @@ static const struct inode_operations hpfs_dir_iops =
        hpfs_rename,                    /* rename */
        NULL,                           /* readlink */
        NULL,                           /* follow_link */
+       NULL,                           /* bmap */
        NULL,                           /* readpage */
        NULL,                           /* writepage */
-       NULL,                           /* bmap */
+       NULL,                           /* flushpage */
        NULL,                           /* truncate */
        NULL,                           /* permission */
        NULL,                           /* smap */
@@ -107,9 +109,10 @@ const struct inode_operations hpfs_symlink_iops =
        NULL,                           /* rename */
        hpfs_readlink,                  /* readlink */
        hpfs_follow_link,               /* follow_link */
+       NULL,                           /* bmap */
        NULL,                           /* readpage */
        NULL,                           /* writepage */
-       NULL,                           /* bmap */
+       NULL,                           /* flushpage */
        NULL,                           /* truncate */
        NULL,                           /* permission */
        NULL,                           /* smap */
index 23ca159c75a293d5511afcd024b8b1e1c2ddbb27..6085fc6b3cce32926bbe6243455d8099211a26f0 100644 (file)
@@ -57,11 +57,14 @@ struct inode_operations isofs_dir_inode_operations =
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static int isofs_name_translate(char * old, int len, char * new)
index ce85b367a7657f0e717d921e0a1b783e39df719e..d0bfa299ecaae104624cdb06dd827fd7b7e6423d 100644 (file)
@@ -53,5 +53,7 @@ struct inode_operations isofs_file_inode_operations = {
        NULL,                   /* writepage */
        NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
index 5de4a874839963003513f9c1efd387a8fcee01d8..e5fc7fcbd896ac68dd9acbb2dd96c4aa0aace66f 100644 (file)
@@ -38,11 +38,14 @@ struct inode_operations isofs_symlink_inode_operations = {
        NULL,                   /* rename */
        isofs_readlink,         /* readlink */
        isofs_follow_link,      /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static int isofs_readlink(struct dentry * dentry, char * buffer, int buflen)
index 187925903b5ae8cd076776bfd213c46f5dbaf76b..532215faf942ffe84149aedcd94dc6a9b60c4361 100644 (file)
@@ -52,11 +52,14 @@ struct inode_operations minix_dir_inode_operations = {
        minix_rename,           /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static int minix_readdir(struct file * filp,
index d6b7ecb17d9e37f9123655bfad2318ca0592b5de..1f2758a20db17b52007ebc136a16dc4de537fe22 100644 (file)
 
 static int minix_writepage(struct file *file, struct page *page)
 {
-       struct dentry *dentry = file->f_dentry;
-       struct inode *inode = dentry->d_inode;
-       unsigned long block;
-       int *p, nr[PAGE_SIZE/BLOCK_SIZE];
-       int i, err, created;
-       struct buffer_head *bh;
-
-       i = PAGE_SIZE / BLOCK_SIZE;
-       block = page->offset / BLOCK_SIZE;
-       p = nr;
-       bh = page->buffers;
-       do {
-               if (bh && bh->b_blocknr)
-                       *p = bh->b_blocknr;
-               else
-                       *p = minix_getblk_block(inode, block, 1, &err, &created);
-               if (!*p)
-                       return -EIO;
-               i--;
-               block++;
-               p++;
-               if (bh)
-                       bh = bh->b_this_page;
-       } while(i > 0);
-
-       /* IO start */
-       brw_page(WRITE, page, inode->i_dev, nr, BLOCK_SIZE, 1);
-       return 0;
+       return block_write_full_page(file, page, minix_getblk_block);
 }
 
 static long minix_write_one_page(struct file *file, struct page *page, unsigned long offset, unsigned long bytes, const char *buf)
 {
-       return block_write_one_page(file, page, offset, bytes, buf, minix_getblk_block);
+       return block_write_partial_page(file, page, offset, bytes, buf, minix_getblk_block);
 }
 
 /*
@@ -88,7 +61,10 @@ static struct file_operations minix_file_operations = {
        NULL,                   /* no special open is needed */
        NULL,                   /* flush */
        NULL,                   /* release */
-       minix_sync_file         /* fsync */
+       minix_sync_file,        /* fsync */
+       NULL,                   /* fasync */
+       NULL,                   /* check_media_change */
+       NULL                    /* revalidate */
 };
 
 struct inode_operations minix_file_inode_operations = {
@@ -104,12 +80,12 @@ struct inode_operations minix_file_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       generic_readpage,       /* readpage */
-       minix_writepage,        /* writepage */
        minix_bmap,             /* bmap */
+       block_read_full_page,   /* readpage */
+       minix_writepage,        /* writepage */
+       block_flushpage,        /* flushpage */
        minix_truncate,         /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
        NULL,                   /* revalidate */
-       block_flushpage,        /* flushpage */
 };
index 4f3661105c54a8df7cc6186a69dd921f5ce8c722..a46ba219e436b538475b136d80e2e496cc53c8ee 100644 (file)
@@ -33,11 +33,14 @@ struct inode_operations minix_symlink_inode_operations = {
        NULL,                   /* rename */
        minix_readlink,         /* readlink */
        minix_follow_link,      /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static struct dentry * minix_follow_link(struct dentry * dentry,
index 8175724d7b38c743ad9b298a2e519ad7bbc3427f..6000b0f6f4b588e983989d22836cbb0b225795fb 100644 (file)
@@ -627,9 +627,10 @@ struct inode_operations msdos_dir_inode_operations = {
        msdos_rename,           /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index 680f011a149ea29a36faa2091e826fe9671b58fe..d22487002af211ab0433823b5bfeb515f3b5379e 100644 (file)
@@ -92,9 +92,10 @@ struct inode_operations ncp_dir_inode_operations =
        ncp_rename,             /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index bb61e2464b9af662ec217241a5fcb309ae9fc93d..916567597392522b005373d253dcc4aefb77007c 100644 (file)
@@ -295,6 +295,13 @@ struct inode_operations ncp_file_inode_operations =
        NULL,                   /* mknod */
        NULL,                   /* rename */
        NULL,                   /* readlink */
+       NULL,                   /* follow_link */
        NULL,                   /* bmap */
-       NULL                    /* truncate */
+       NULL,                   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
+       NULL,                   /* truncate */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
index a923c218c927239f3a1b05ca2d1efc2ebbb046da..ec56f0e678e0770f2c29f375841d624c2087a72f 100644 (file)
@@ -59,12 +59,14 @@ struct inode_operations ncp_symlink_inode_operations={
        NULL,                   /* rename */
        ncp_readlink,           /* readlink */
        ncp_follow_link,        /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 /* ----- follow a symbolic link ------------------------------------------ */
index d9430c2cca365a63f27d19eff98010be4e23c1d2..0a63da2c110ba18f0f2500d95550d55144ceb927 100644 (file)
@@ -439,9 +439,10 @@ static struct inode_operations ntfs_inode_operations_nobmap = {
        NULL, /* rename */
        NULL, /* readlink */
        NULL, /* follow_link */
+       NULL, /* bmap */
        NULL, /* readpage */
        NULL, /* writepage */
-       NULL, /* bmap */
+       NULL, /* flushpage */
        NULL, /* truncate */
        NULL, /* permission */
        NULL, /* smap */
@@ -621,9 +622,10 @@ static struct inode_operations ntfs_inode_operations = {
        NULL, /* rename */
        NULL, /* readlink */
        NULL, /* follow_link */
-       generic_readpage,
-       NULL, /* writepage */
        ntfs_bmap,
+       block_read_full_page,
+       NULL, /* writepage */
+       NULL, /* flushpage */
        NULL, /* truncate */
        NULL, /* permission */
        NULL, /* smap */
@@ -669,9 +671,10 @@ static struct inode_operations ntfs_dir_inode_operations = {
        NULL, /* rename */
        NULL, /* readlink */
        NULL, /* follow_link */
+       NULL, /* bmap */
        NULL, /* readpage */
        NULL, /* writepage */
-       NULL, /* bmap */
+       NULL, /* flushpage */
        NULL, /* truncate */
        NULL, /* permission */
        NULL, /* smap */
index dcb007f11cad7d57092490498239fe3b50dee702..ea81bd6f2f9049edcefa30a4630bbe1dba30cf7c 100644 (file)
@@ -577,11 +577,14 @@ static struct inode_operations openpromfs_prop_inode_ops = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static struct file_operations openpromfs_nodenum_ops = {
@@ -611,11 +614,14 @@ static struct inode_operations openpromfs_nodenum_inode_ops = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static struct file_operations openprom_alias_operations = {
@@ -645,11 +651,14 @@ static struct inode_operations openprom_alias_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static int lookup_children(u16 n, const char * name, int len)
index 029fd9061b13b890664b5cf7a2cf4ded5c9e516e..ddf8ff0360c7fb110efcacad4f32ad4828502bcd 100644 (file)
@@ -114,10 +114,12 @@ struct inode_operations qnx4_dir_inode_operations =
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
index ab923b7f07468881a9c3e102251d6e638075f1de..dafe212f106222dc399d4711124845a74c52dce4 100644 (file)
@@ -189,16 +189,18 @@ struct inode_operations qnx4_file_inode_operations =
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       qnx4_bmap,              /* bmap */
        qnx4_readpage,          /* readpage */
        NULL,                   /* writepage */
-       qnx4_bmap,              /* bmap */
+       NULL,                   /* flushpage */
 #ifdef CONFIG_QNX4FS_RW
        qnx4_truncate,          /* truncate */
 #else
        NULL,
 #endif
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static int qnx4_readpage(struct file *file, struct page *page)
index 4572586709876179cbe827667ec7cd8feb43ffa4..7fedc276092da9889b7e25bc77038a4068782507 100644 (file)
@@ -43,11 +43,14 @@ struct inode_operations qnx4_symlink_inode_operations =
        NULL,                   /* rename */
        qnx4_readlink,          /* readlink */
        qnx4_follow_link,       /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static struct dentry *qnx4_follow_link(struct dentry *dentry,
index d35b0d130a01ac2d9f3c16098c898fbaf769d373..abb55b76246739ac511ed433f9b3f3d49ef53a71 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * ROMFS file system, Linux implementation
  *
- * Copyright (C) 1997  Janos Farkas <chexum@shadow.banki.hu>
+ * Copyright (C) 1997-1999  Janos Farkas <chexum@shadow.banki.hu>
  *
  * Using parts of the minix filesystem
  * Copyright (C) 1991, 1992  Linus Torvalds
@@ -57,6 +57,7 @@
 #include <linux/fs.h>
 #include <linux/locks.h>
 #include <linux/init.h>
+#include <linux/smp_lock.h>
 
 #include <asm/uaccess.h>
 
@@ -320,7 +321,7 @@ romfs_lookup(struct inode *dir, struct dentry *dentry)
        const char *name;               /* got from dentry */
        int len;
 
-       res = 0;                        /* instead of ENOENT */
+       res = -EACCES;                  /* placeholder for "no data here" */
        offset = dir->i_ino & ROMFH_MASK;
        if (romfs_copyfrom(dir, &ri, offset, ROMFH_SIZE) <= 0)
                goto out;
@@ -335,8 +336,9 @@ romfs_lookup(struct inode *dir, struct dentry *dentry)
        len = dentry->d_name.len;
 
        for(;;) {
-               if (!offset || offset >= maxoff
-                   || romfs_copyfrom(dir, &ri, offset, ROMFH_SIZE) <= 0)
+               if (!offset || offset >= maxoff)
+                       goto out0;
+               if (romfs_copyfrom(dir, &ri, offset, ROMFH_SIZE) <= 0)
                        goto out;
 
                /* try to match the first 16 bytes of name */
@@ -365,19 +367,28 @@ romfs_lookup(struct inode *dir, struct dentry *dentry)
        if ((ntohl(ri.next) & ROMFH_TYPE) == ROMFH_HRD)
                offset = ntohl(ri.spec) & ROMFH_MASK;
 
-       if ((inode = iget(dir->i_sb, offset))==NULL) {
-               res = -EACCES;
-       } else {
-               d_add(dentry, inode);
-       }
+       if ((inode = iget(dir->i_sb, offset)))
+               goto outi;
 
-out:
-       return ERR_PTR(res);
+       /*
+        * it's a bit funky, _lookup needs to return an error code
+        * (negative) or a NULL, both as a dentry.  ENOENT should not
+        * be returned, instead we need to create a negative dentry by
+        * d_add(dentry, NULL); and return 0 as no error.
+        * (Although as I see, it only matters on writable file
+        * systems).
+        */
+
+out0:  inode = NULL;
+outi:  res = 0;
+       d_add (dentry, inode);
+
+out:   return ERR_PTR(res);
 }
 
 /*
  * Ok, we do readpage, to be able to execute programs.  Unfortunately,
- * we can't use bmap, since we have looser alignments.
+ * we can't use bmap, since we may have looser alignments.
  */
 
 static int
@@ -389,12 +400,13 @@ romfs_readpage(struct file * file, struct page * page)
        unsigned long offset, avail, readlen;
        int result = -EIO;
 
-       atomic_inc(&page->count);
-       set_bit(PG_locked, &page->flags);
-
+       lock_kernel();
+       get_page(page);
        buf = page_address(page);
-       clear_bit(PG_uptodate, &page->flags);
-       clear_bit(PG_error, &page->flags);
+
+       /* hack? */
+       page->owner = (int)current;
+
        offset = page->offset;
        if (offset < inode->i_size) {
                avail = inode->i_size-offset;
@@ -403,18 +415,19 @@ romfs_readpage(struct file * file, struct page * page)
                        if (readlen < PAGE_SIZE) {
                                memset((void *)(buf+readlen),0,PAGE_SIZE-readlen);
                        }
-                       set_bit(PG_uptodate, &page->flags);
+                       SetPageUptodate(page);
                        result = 0;
                }
        }
        if (result) {
-               set_bit(PG_error, &page->flags);
                memset((void *)buf, 0, PAGE_SIZE);
+               SetPageError(page);
        }
 
-       clear_bit(PG_locked, &page->flags);
-       wake_up(&page->wait);
+       UnlockPage(page);
+
        free_page(buf);
+       unlock_kernel();
 
        return result;
 }
@@ -508,12 +521,14 @@ static struct inode_operations romfs_file_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap -- not really */
        romfs_readpage,         /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap -- not really */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static struct file_operations romfs_dir_operations = {
@@ -550,12 +565,14 @@ static struct inode_operations romfs_dir_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static struct inode_operations romfs_link_inode_operations = {
@@ -571,18 +588,20 @@ static struct inode_operations romfs_link_inode_operations = {
        NULL,                   /* rename */
        romfs_readlink,         /* readlink */
        romfs_follow_link,      /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static mode_t romfs_modemap[] =
 {
-       0, S_IFDIR, S_IFREG, S_IFLNK+0777,
-       S_IFBLK, S_IFCHR, S_IFSOCK, S_IFIFO
+       0, S_IFDIR+0644, S_IFREG+0644, S_IFLNK+0777,
+       S_IFBLK+0600, S_IFCHR+0600, S_IFSOCK+0644, S_IFIFO+0644
 };
 
 static struct inode_operations *romfs_inoops[] =
@@ -591,10 +610,10 @@ static struct inode_operations *romfs_inoops[] =
        &romfs_dir_inode_operations,
        &romfs_file_inode_operations,
        &romfs_link_inode_operations,
-       &blkdev_inode_operations,       /* standard handlers */
-       &chrdev_inode_operations,
-       NULL,                           /* socket */
-       NULL,                           /* fifo */
+       NULL,                           /* device/fifo/socket nodes, */
+       NULL,                           /*   set by init_special_inode */
+       NULL,
+       NULL,
 };
 
 static void
@@ -627,34 +646,30 @@ romfs_read_inode(struct inode *i)
        i->i_mtime = i->i_atime = i->i_ctime = 0;
        i->i_uid = i->i_gid = 0;
 
-       i->i_op = romfs_inoops[nextfh & ROMFH_TYPE];
-
-       /* Precalculate the data offset */
-       ino = romfs_strnlen(i, ino+ROMFH_SIZE, ROMFS_MAXFN);
-       if (ino >= 0)
-               ino = ((ROMFH_SIZE+ino+1+ROMFH_PAD)&ROMFH_MASK);
-       else
-               ino = 0;
-
-       i->u.romfs_i.i_metasize = ino;
-       i->u.romfs_i.i_dataoffset = ino+(i->i_ino&ROMFH_MASK);
-
-       /* Compute permissions */
-       ino = S_IRUGO|S_IWUSR;
-       ino |= romfs_modemap[nextfh & ROMFH_TYPE];
-       if (nextfh & ROMFH_EXEC) {
-               ino |= S_IXUGO;
-       }
-       i->i_mode = ino;
-
-       if (S_ISFIFO(ino))
-               init_fifo(i);
-       else if (S_ISDIR(ino))
-               i->i_size = i->u.romfs_i.i_metasize;
-       else if (S_ISBLK(ino) || S_ISCHR(ino)) {
-               i->i_mode &= ~(S_IRWXG|S_IRWXO);
-               ino = ntohl(ri.spec);
-               i->i_rdev = MKDEV(ino>>16,ino&0xffff);
+        /* Precalculate the data offset */
+        ino = romfs_strnlen(i, ino+ROMFH_SIZE, ROMFS_MAXFN);
+        if (ino >= 0)
+                ino = ((ROMFH_SIZE+ino+1+ROMFH_PAD)&ROMFH_MASK);
+        else
+                ino = 0;
+
+        i->u.romfs_i.i_metasize = ino;
+        i->u.romfs_i.i_dataoffset = ino+(i->i_ino&ROMFH_MASK);
+
+        /* Compute permissions */
+        ino = romfs_modemap[nextfh & ROMFH_TYPE];
+       /* only "normal" files have ops */
+        if ((i->i_op = romfs_inoops[nextfh & ROMFH_TYPE])) {
+               if (nextfh & ROMFH_EXEC)
+                       ino |= S_IXUGO;
+               i->i_mode = ino;
+               if (S_ISDIR(ino))
+                       i->i_size = i->u.romfs_i.i_metasize;
+       } else {
+               /* depending on MBZ for sock/fifos */
+               nextfh = ntohl(ri.spec);
+               nextfh = kdev_t_to_nr(MKDEV(nextfh>>16,nextfh&0xffff));
+               init_special_inode(i, ino, nextfh);
        }
 }
 
index 870ebac74cf8fbb2679932d1a6f891625ef93c64..d945be585528dbdc0fb5158a9652b72e80f1462a 100644 (file)
@@ -59,9 +59,10 @@ struct inode_operations smb_dir_inode_operations =
        smb_rename,             /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index cfb2d82da9bd638c77286cd25c9167dbc82ac3b7..802012a3b9b071e8d435196fc2440379fc3e0b2c 100644 (file)
@@ -404,9 +404,10 @@ struct inode_operations smb_file_inode_operations =
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        smb_readpage,           /* readpage */
        smb_writepage,          /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        smb_file_permission,    /* permission */
        NULL,                   /* smap */
index a28a7ba8e9aeab944c2d0095dc641f0b83fca712..93920fe0f2ed0f33a64db857cc43a6289f66fe0f 100644 (file)
@@ -59,11 +59,14 @@ struct inode_operations sysv_dir_inode_operations = {
        sysv_rename,            /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static int sysv_readdir(struct file * filp, void * dirent, filldir_t filldir)
index 19443f2890c43333c98453d0b5686a1132380898..1c0ae0b6a4da9f57e56dd4cc2225f47bc2dbece1 100644 (file)
 
 static int sysv_writepage (struct file * file, struct page * page)
 {
-       struct dentry *dentry = file->f_dentry;
-       struct inode *inode = dentry->d_inode;
-       unsigned long block;
-       int *p, nr[PAGE_SIZE/512];
-       int i, err, created;
-       struct buffer_head *bh;
-
-       i = PAGE_SIZE >> inode->i_sb->sv_block_size_bits;
-       block = page->offset >> inode->i_sb->sv_block_size_bits;
-       p = nr;
-       bh = page->buffers;
-       do {
-               if (bh && bh->b_blocknr)
-                       *p = bh->b_blocknr;
-               else
-                       *p = sysv_getblk_block (inode, block, 1, &err, &created);
-               if (!*p)
-                       return -EIO;
-               i--;
-               block++;
-               p++;
-               if (bh)
-                       bh = bh->b_this_page;
-       } while (i > 0);
-
-       /* IO start */
-       brw_page(WRITE, page, inode->i_dev, nr, inode->i_sb->sv_block_size, 1);
-       return 0;
+       return block_write_full_page(file, page, sysv_getblk_block);
 }
 
 static long sysv_write_one_page (struct file *file, struct page *page, unsigned long offset, unsigned long bytes, const char * buf)
 {
-       return block_write_one_page(file, page, offset, bytes, buf, sysv_getblk_block);
+       return block_write_partial_page(file, page, offset, bytes, buf, sysv_getblk_block);
 }
 
 /*
@@ -113,12 +86,12 @@ struct inode_operations sysv_file_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       generic_readpage,       /* readpage */
-       sysv_writepage,         /* writepage */
        sysv_bmap,              /* bmap */
+       block_read_full_page,   /* readpage */
+       sysv_writepage,         /* writepage */
+       block_flushpage,        /* flushpage */
        sysv_truncate,          /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
-       NULL,                   /* revalidate */
-       block_flushpage,        /* flushpage */
+       NULL                    /* revalidate */
 };
index 5ebaec7ccc2ac0d3ecc7e396a2f7be9db93e2e13..2e793aaa015579cfe50f6d149413e9954b170e9b 100644 (file)
@@ -39,11 +39,14 @@ struct inode_operations sysv_symlink_inode_operations = {
        NULL,                   /* rename */
        sysv_readlink,          /* readlink */
        sysv_follow_link,       /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 static struct dentry *sysv_follow_link(struct dentry * dentry,
index 6a79c4a5e96f1cfa565a609443fa195b97d15c08..abf6765d79b2093b0d234cc74d51710a6ab42671 100644 (file)
@@ -209,10 +209,12 @@ struct inode_operations ufs_dir_inode_operations = {
        ufs_rename,             /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        ufs_permission,         /* permission */
        NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
index 9e027cfc373486d91e57fc1312eb2684853b44da..0a1dd64ce2e6d35d803b234ac70a04906f2e8505 100644 (file)
@@ -89,38 +89,12 @@ static inline void remove_suid(struct inode *inode)
 
 static int ufs_writepage (struct file *file, struct page *page)
 {
-       struct dentry *dentry = file->f_dentry;
-       struct inode *inode = dentry->d_inode;
-       unsigned long block;
-       int *p, nr[PAGE_SIZE/512];
-       int i, err, created;
-       struct buffer_head *bh;
-
-       i = PAGE_SIZE >> inode->i_sb->s_blocksize_bits;
-       block = page->offset >> inode->i_sb->s_blocksize_bits;
-       p = nr;
-       bh = page->buffers;
-       do {
-               if (bh && bh->b_blocknr)
-                       *p = bh->b_blocknr;
-               else
-                       *p = ufs_getfrag_block(inode, block, 1, &err, &created);
-               if (!*p)
-                       return -EIO;
-               i--;
-               block++;
-               p++;
-               if (bh)
-                       bh = bh->b_this_page;
-       } while (i > 0);
-
-       brw_page(WRITE, page, inode->i_dev, nr, inode->i_sb->s_blocksize, 1);
-       return 0;
+       return block_write_full_page(file, page, ufs_getfrag_block);
 }
 
 static long ufs_write_one_page(struct file *file, struct page *page, unsigned long offset, unsigned long bytes, const char *buf)
 {
-       return block_write_one_page(file, page, offset, bytes, buf, ufs_getfrag_block);
+       return block_write_partial_page(file, page, offset, bytes, buf, ufs_getfrag_block);
 }
 
 /*
@@ -129,7 +103,14 @@ static long ufs_write_one_page(struct file *file, struct page *page, unsigned lo
 static ssize_t
 ufs_file_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
 {
-       return generic_file_write(file, buf, count, ppos, ufs_write_one_page);
+       ssize_t retval = generic_file_write(file, buf, count, ppos, ufs_write_one_page);
+       if (retval > 0) {
+               struct inode *inode = file->f_dentry->d_inode;
+               remove_suid(inode);
+               inode->i_ctime = inode->i_mtime = CURRENT_TIME;
+               mark_inode_dirty(inode);
+       }
+       return retval;
 }
 
 /*
@@ -176,12 +157,12 @@ struct inode_operations ufs_file_inode_operations = {
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       generic_readpage,       /* readpage */
-       ufs_writepage,          /* writepage */
        ufs_bmap,               /* bmap */
+       block_read_full_page,   /* readpage */
+       ufs_writepage,          /* writepage */
+       block_flushpage,        /* flushpage */
        ufs_truncate,           /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
        NULL,                   /* revalidate */
-       block_flushpage,        /* flushpage */
 };
index 39b54e05d5525a9c183f55296a562099bd10077f..cfebdf20d2003f99c02b82cb8a07fa99dbf0a0a5 100644 (file)
@@ -129,10 +129,12 @@ struct inode_operations ufs_symlink_inode_operations = {
        NULL,                   /* rename */
        ufs_readlink,           /* readlink */
        ufs_follow_link,        /* follow_link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
-       NULL                    /* smap */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
index 0f26103c47fcaf9a51714a707c3546d2f9680cd7..51247073127ae9c7216ae1fd5a2041c36c9c1286 100644 (file)
@@ -832,9 +832,10 @@ struct inode_operations umsdos_dir_inode_operations =
        UMSDOS_rename,          /* rename */
        NULL,                   /* readlink */
        NULL,                   /* followlink */
-       generic_readpage,       /* readpage */
-       NULL,                   /* writepage */
        fat_bmap,               /* bmap */
+       block_read_full_page,   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index 339d828011f2043a26bd62473b04a6a42070ba9c..0d417facb3c77cfa42d6a321fa8af92f1b18e85d 100644 (file)
@@ -99,12 +99,14 @@ struct inode_operations umsdos_file_inode_operations =
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
-       generic_readpage,       /* readpage */
-       NULL,                   /* writepage */
        fat_bmap,               /* bmap */
+       block_read_full_page,   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
        UMSDOS_truncate,        /* truncate */
        NULL,                   /* permission */
-       fat_smap                /* smap */
+       fat_smap,               /* smap */
+       NULL                    /* revalidate */
 };
 
 /* For other with larger and unaligned file system */
@@ -137,12 +139,14 @@ struct inode_operations umsdos_file_inode_operations_no_bmap =
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow link */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        UMSDOS_truncate,        /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 /* For other with larger and unaligned file system with readpage */
@@ -175,10 +179,12 @@ struct inode_operations umsdos_file_inode_operations_readpage =
        NULL,                   /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow link */
+       NULL,                   /* bmap */
        fat_readpage,           /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        UMSDOS_truncate,        /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
index 97ea2da411f71d9b3e3d3219531ae912caa88e62..0372eef2ae589663dca2dc9f91fd7ea6c9f32904 100644 (file)
@@ -135,9 +135,10 @@ struct inode_operations umsdos_symlink_inode_operations =
        NULL,                   /* rename */
        UMSDOS_readlink,        /* readlink */
        UMSDOS_followlink,      /* followlink */
-       generic_readpage,       /* readpage */
-       NULL,                   /* writepage */
        fat_bmap,               /* bmap */
+       block_read_full_page,   /* readpage */
+       NULL,                   /* writepage */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
        NULL,                   /* permission */
        NULL,                   /* smap */
index d372ead155368c59e57ad05f605138c4202c39f0..5d5bcdd2d44cf743c96de5acccdc4bdc34f3378c 100644 (file)
@@ -1232,11 +1232,14 @@ struct inode_operations vfat_dir_inode_operations = {
        vfat_rename,            /* rename */
        NULL,                   /* readlink */
        NULL,                   /* followlink */
+       NULL,                   /* bmap */
        NULL,                   /* readpage */
        NULL,                   /* writepage */
-       NULL,                   /* bmap */
+       NULL,                   /* flushpage */
        NULL,                   /* truncate */
-       NULL                    /* permission */
+       NULL,                   /* permission */
+       NULL,                   /* smap */
+       NULL                    /* revalidate */
 };
 
 struct super_block *vfat_read_super(struct super_block *sb,void *data,