Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

udf: Convert udf_expand_file_adinicb() to avoid kmap_atomic()

Remove the last two remaining kmap_atomic() uses in UDF in
udf_expand_file_adinicb(). The first use can be actually conveniently
replaced with udf_adinicb_readpage(), the second with memcpy_to_page().

Signed-off-by: Jan Kara <jack@suse.cz>

Jan Kara 1eeceaec 5cfc4532

+4 -14
+4 -14
fs/udf/inode.c
··· 336 336 int udf_expand_file_adinicb(struct inode *inode) 337 337 { 338 338 struct page *page; 339 - char *kaddr; 340 339 struct udf_inode_info *iinfo = UDF_I(inode); 341 340 int err; 342 341 ··· 357 358 if (!page) 358 359 return -ENOMEM; 359 360 360 - if (!PageUptodate(page)) { 361 - kaddr = kmap_atomic(page); 362 - memset(kaddr + iinfo->i_lenAlloc, 0x00, 363 - PAGE_SIZE - iinfo->i_lenAlloc); 364 - memcpy(kaddr, iinfo->i_data + iinfo->i_lenEAttr, 365 - iinfo->i_lenAlloc); 366 - flush_dcache_page(page); 367 - SetPageUptodate(page); 368 - kunmap_atomic(kaddr); 369 - } 361 + if (!PageUptodate(page)) 362 + udf_adinicb_readpage(page); 370 363 down_write(&iinfo->i_data_sem); 371 364 memset(iinfo->i_data + iinfo->i_lenEAttr, 0x00, 372 365 iinfo->i_lenAlloc); ··· 375 384 /* Restore everything back so that we don't lose data... */ 376 385 lock_page(page); 377 386 down_write(&iinfo->i_data_sem); 378 - kaddr = kmap_atomic(page); 379 - memcpy(iinfo->i_data + iinfo->i_lenEAttr, kaddr, inode->i_size); 380 - kunmap_atomic(kaddr); 387 + memcpy_to_page(page, 0, iinfo->i_data + iinfo->i_lenEAttr, 388 + inode->i_size); 381 389 unlock_page(page); 382 390 iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB; 383 391 iinfo->i_lenAlloc = inode->i_size;