]> git.proxmox.com Git - mirror_ubuntu-kernels.git/blobdiff - fs/afs/dir.c
scsi: core: raid_class: Remove raid_component_add()
[mirror_ubuntu-kernels.git] / fs / afs / dir.c
index 104df2964225c6bfdaa88ac11c5a003f4f597a26..770fb4b17128ef0accd99bb1b775caf8bb0fe029 100644 (file)
@@ -77,6 +77,7 @@ const struct address_space_operations afs_dir_aops = {
        .dirty_folio    = afs_dir_dirty_folio,
        .release_folio  = afs_dir_release_folio,
        .invalidate_folio = afs_dir_invalidate_folio,
+       .migrate_folio  = filemap_migrate_folio,
 };
 
 const struct dentry_operations afs_fs_dentry_operations = {
@@ -274,6 +275,7 @@ static struct afs_read *afs_read_dir(struct afs_vnode *dvnode, struct key *key)
        loff_t i_size;
        int nr_pages, i;
        int ret;
+       loff_t remote_size = 0;
 
        _enter("");
 
@@ -288,6 +290,8 @@ static struct afs_read *afs_read_dir(struct afs_vnode *dvnode, struct key *key)
 
 expand:
        i_size = i_size_read(&dvnode->netfs.inode);
+       if (i_size < remote_size)
+           i_size = remote_size;
        if (i_size < 2048) {
                ret = afs_bad(dvnode, afs_file_error_dir_small);
                goto error;
@@ -363,6 +367,7 @@ expand:
                         * buffer.
                         */
                        up_write(&dvnode->validate_lock);
+                       remote_size = req->file_size;
                        goto expand;
                }
 
@@ -1353,6 +1358,7 @@ static int afs_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
        op->dentry      = dentry;
        op->create.mode = S_IFDIR | mode;
        op->create.reason = afs_edit_dir_for_mkdir;
+       op->mtime       = current_time(dir);
        op->ops         = &afs_mkdir_operation;
        return afs_do_sync_operation(op);
 }
@@ -1656,6 +1662,7 @@ static int afs_create(struct user_namespace *mnt_userns, struct inode *dir,
        op->dentry      = dentry;
        op->create.mode = S_IFREG | mode;
        op->create.reason = afs_edit_dir_for_create;
+       op->mtime       = current_time(dir);
        op->ops         = &afs_create_operation;
        return afs_do_sync_operation(op);
 
@@ -1791,6 +1798,7 @@ static int afs_symlink(struct user_namespace *mnt_userns, struct inode *dir,
        op->ops                 = &afs_symlink_operation;
        op->create.reason       = afs_edit_dir_for_symlink;
        op->create.symlink      = content;
+       op->mtime               = current_time(dir);
        return afs_do_sync_operation(op);
 
 error: