]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blobdiff - fs/ubifs/file.c
Merge tag 'armsoc-late' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[mirror_ubuntu-eoan-kernel.git] / fs / ubifs / file.c
index fd7eb6fe90904fa9a57bd46711124f54af475849..1b78f2e09218bd3fcf44f2772c47af54347a1bc1 100644 (file)
@@ -71,7 +71,7 @@ static int read_block(struct inode *inode, void *addr, unsigned int block,
                return err;
        }
 
-       ubifs_assert(le64_to_cpu(dn->ch.sqnum) >
+       ubifs_assert(c, le64_to_cpu(dn->ch.sqnum) >
                     ubifs_inode(inode)->creat_sqnum);
        len = le32_to_cpu(dn->size);
        if (len <= 0 || len > UBIFS_BLOCK_SIZE)
@@ -115,12 +115,13 @@ static int do_readpage(struct page *page)
        unsigned int block, beyond;
        struct ubifs_data_node *dn;
        struct inode *inode = page->mapping->host;
+       struct ubifs_info *c = inode->i_sb->s_fs_info;
        loff_t i_size = i_size_read(inode);
 
        dbg_gen("ino %lu, pg %lu, i_size %lld, flags %#lx",
                inode->i_ino, page->index, i_size, page->flags);
-       ubifs_assert(!PageChecked(page));
-       ubifs_assert(!PagePrivate(page));
+       ubifs_assert(c, !PageChecked(page));
+       ubifs_assert(c, !PagePrivate(page));
 
        addr = kmap(page);
 
@@ -441,8 +442,8 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
        int skipped_read = 0;
        struct page *page;
 
-       ubifs_assert(ubifs_inode(inode)->ui_size == inode->i_size);
-       ubifs_assert(!c->ro_media && !c->ro_mount);
+       ubifs_assert(c, ubifs_inode(inode)->ui_size == inode->i_size);
+       ubifs_assert(c, !c->ro_media && !c->ro_mount);
 
        if (unlikely(c->ro_error))
                return -EROFS;
@@ -481,7 +482,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
 
        err = allocate_budget(c, page, ui, appending);
        if (unlikely(err)) {
-               ubifs_assert(err == -ENOSPC);
+               ubifs_assert(c, err == -ENOSPC);
                /*
                 * If we skipped reading the page because we were going to
                 * write all of it, then it is not up to date.
@@ -498,7 +499,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
                 * everything and fall-back to slow-path.
                 */
                if (appending) {
-                       ubifs_assert(mutex_is_locked(&ui->ui_mutex));
+                       ubifs_assert(c, mutex_is_locked(&ui->ui_mutex));
                        mutex_unlock(&ui->ui_mutex);
                }
                unlock_page(page);
@@ -595,7 +596,7 @@ static int ubifs_write_end(struct file *file, struct address_space *mapping,
                 * '__set_page_dirty_nobuffers()'.
                 */
                __mark_inode_dirty(inode, I_DIRTY_DATASYNC);
-               ubifs_assert(mutex_is_locked(&ui->ui_mutex));
+               ubifs_assert(c, mutex_is_locked(&ui->ui_mutex));
                mutex_unlock(&ui->ui_mutex);
        }
 
@@ -648,7 +649,7 @@ static int populate_page(struct ubifs_info *c, struct page *page,
 
                        dn = bu->buf + (bu->zbranch[nn].offs - offs);
 
-                       ubifs_assert(le64_to_cpu(dn->ch.sqnum) >
+                       ubifs_assert(c, le64_to_cpu(dn->ch.sqnum) >
                                     ubifs_inode(inode)->creat_sqnum);
 
                        len = le32_to_cpu(dn->size);
@@ -767,8 +768,8 @@ static int ubifs_do_bulk_read(struct ubifs_info *c, struct bu_info *bu,
                        bu->buf_len = bu->zbranch[bu->cnt - 1].offs +
                                      bu->zbranch[bu->cnt - 1].len -
                                      bu->zbranch[0].offs;
-                       ubifs_assert(bu->buf_len > 0);
-                       ubifs_assert(bu->buf_len <= c->leb_size);
+                       ubifs_assert(c, bu->buf_len > 0);
+                       ubifs_assert(c, bu->buf_len <= c->leb_size);
                        bu->buf = kmalloc(bu->buf_len, GFP_NOFS | __GFP_NOWARN);
                        if (!bu->buf)
                                goto out_bu_off;
@@ -920,7 +921,7 @@ static int do_writepage(struct page *page, int len)
 #ifdef UBIFS_DEBUG
        struct ubifs_inode *ui = ubifs_inode(inode);
        spin_lock(&ui->ui_lock);
-       ubifs_assert(page->index <= ui->synced_i_size >> PAGE_SHIFT);
+       ubifs_assert(c, page->index <= ui->synced_i_size >> PAGE_SHIFT);
        spin_unlock(&ui->ui_lock);
 #endif
 
@@ -949,7 +950,7 @@ static int do_writepage(struct page *page, int len)
                ubifs_ro_mode(c, err);
        }
 
-       ubifs_assert(PagePrivate(page));
+       ubifs_assert(c, PagePrivate(page));
        if (PageChecked(page))
                release_new_page_budget(c);
        else
@@ -1014,6 +1015,7 @@ static int do_writepage(struct page *page, int len)
 static int ubifs_writepage(struct page *page, struct writeback_control *wbc)
 {
        struct inode *inode = page->mapping->host;
+       struct ubifs_info *c = inode->i_sb->s_fs_info;
        struct ubifs_inode *ui = ubifs_inode(inode);
        loff_t i_size =  i_size_read(inode), synced_i_size;
        pgoff_t end_index = i_size >> PAGE_SHIFT;
@@ -1022,7 +1024,7 @@ static int ubifs_writepage(struct page *page, struct writeback_control *wbc)
 
        dbg_gen("ino %lu, pg %lu, pg flags %#lx",
                inode->i_ino, page->index, page->flags);
-       ubifs_assert(PagePrivate(page));
+       ubifs_assert(c, PagePrivate(page));
 
        /* Is the page fully outside @i_size? (truncate in progress) */
        if (page->index > end_index || (page->index == end_index && !len)) {
@@ -1167,7 +1169,7 @@ static int do_truncation(struct ubifs_info *c, struct inode *inode,
                                 * 'ubifs_jnl_truncate()' will see an already
                                 * truncated (and up to date) data node.
                                 */
-                               ubifs_assert(PagePrivate(page));
+                               ubifs_assert(c, PagePrivate(page));
 
                                clear_page_dirty_for_io(page);
                                if (UBIFS_BLOCKS_PER_PAGE_SHIFT)
@@ -1303,7 +1305,7 @@ static void ubifs_invalidatepage(struct page *page, unsigned int offset,
        struct inode *inode = page->mapping->host;
        struct ubifs_info *c = inode->i_sb->s_fs_info;
 
-       ubifs_assert(PagePrivate(page));
+       ubifs_assert(c, PagePrivate(page));
        if (offset || length < PAGE_SIZE)
                /* Partial page remains dirty */
                return;
@@ -1365,11 +1367,10 @@ out:
  * granularity, they are not updated. This is an optimization.
  */
 static inline int mctime_update_needed(const struct inode *inode,
-                                      const struct timespec *now)
+                                      const struct timespec64 *now)
 {
-       struct timespec64 now64 = timespec_to_timespec64(*now);
-       if (!timespec64_equal(&inode->i_mtime, &now64) ||
-           !timespec64_equal(&inode->i_ctime, &now64))
+       if (!timespec64_equal(&inode->i_mtime, now) ||
+           !timespec64_equal(&inode->i_ctime, now))
                return 1;
        return 0;
 }
@@ -1425,7 +1426,7 @@ int ubifs_update_time(struct inode *inode, struct timespec64 *time,
  */
 static int update_mctime(struct inode *inode)
 {
-       struct timespec now = timespec64_to_timespec(current_time(inode));
+       struct timespec64 now = current_time(inode);
        struct ubifs_inode *ui = ubifs_inode(inode);
        struct ubifs_info *c = inode->i_sb->s_fs_info;
 
@@ -1462,13 +1463,15 @@ static ssize_t ubifs_write_iter(struct kiocb *iocb, struct iov_iter *from)
 static int ubifs_set_page_dirty(struct page *page)
 {
        int ret;
+       struct inode *inode = page->mapping->host;
+       struct ubifs_info *c = inode->i_sb->s_fs_info;
 
        ret = __set_page_dirty_nobuffers(page);
        /*
         * An attempt to dirty a page without budgeting for it - should not
         * happen.
         */
-       ubifs_assert(ret == 0);
+       ubifs_assert(c, ret == 0);
        return ret;
 }
 
@@ -1497,14 +1500,17 @@ static int ubifs_migrate_page(struct address_space *mapping,
 
 static int ubifs_releasepage(struct page *page, gfp_t unused_gfp_flags)
 {
+       struct inode *inode = page->mapping->host;
+       struct ubifs_info *c = inode->i_sb->s_fs_info;
+
        /*
         * An attempt to release a dirty page without budgeting for it - should
         * not happen.
         */
        if (PageWriteback(page))
                return 0;
-       ubifs_assert(PagePrivate(page));
-       ubifs_assert(0);
+       ubifs_assert(c, PagePrivate(page));
+       ubifs_assert(c, 0);
        ClearPagePrivate(page);
        ClearPageChecked(page);
        return 1;
@@ -1519,13 +1525,13 @@ static vm_fault_t ubifs_vm_page_mkwrite(struct vm_fault *vmf)
        struct page *page = vmf->page;
        struct inode *inode = file_inode(vmf->vma->vm_file);
        struct ubifs_info *c = inode->i_sb->s_fs_info;
-       struct timespec now = timespec64_to_timespec(current_time(inode));
+       struct timespec64 now = current_time(inode);
        struct ubifs_budget_req req = { .new_page = 1 };
        int err, update_time;
 
        dbg_gen("ino %lu, pg %lu, i_size %lld", inode->i_ino, page->index,
                i_size_read(inode));
-       ubifs_assert(!c->ro_media && !c->ro_mount);
+       ubifs_assert(c, !c->ro_media && !c->ro_mount);
 
        if (unlikely(c->ro_error))
                return VM_FAULT_SIGBUS; /* -EROFS */
@@ -1654,7 +1660,9 @@ const struct address_space_operations ubifs_file_address_operations = {
 const struct inode_operations ubifs_file_inode_operations = {
        .setattr     = ubifs_setattr,
        .getattr     = ubifs_getattr,
+#ifdef CONFIG_UBIFS_FS_XATTR
        .listxattr   = ubifs_listxattr,
+#endif
 #ifdef CONFIG_UBIFS_ATIME_SUPPORT
        .update_time = ubifs_update_time,
 #endif
@@ -1664,7 +1672,9 @@ const struct inode_operations ubifs_symlink_inode_operations = {
        .get_link    = ubifs_get_link,
        .setattr     = ubifs_setattr,
        .getattr     = ubifs_getattr,
+#ifdef CONFIG_UBIFS_FS_XATTR
        .listxattr   = ubifs_listxattr,
+#endif
 #ifdef CONFIG_UBIFS_ATIME_SUPPORT
        .update_time = ubifs_update_time,
 #endif