hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/fs/jffs2/gc.c
....@@ -1165,12 +1165,13 @@
11651165 struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
11661166 uint32_t start, uint32_t end)
11671167 {
1168
+ struct inode *inode = OFNI_EDONI_2SFFJ(f);
11681169 struct jffs2_full_dnode *new_fn;
11691170 struct jffs2_raw_inode ri;
11701171 uint32_t alloclen, offset, orig_end, orig_start;
11711172 int ret = 0;
11721173 unsigned char *comprbuf = NULL, *writebuf;
1173
- unsigned long pg;
1174
+ struct page *page;
11741175 unsigned char *pg_ptr;
11751176
11761177 memset(&ri, 0, sizeof(ri));
....@@ -1325,14 +1326,17 @@
13251326 * end up here trying to GC the *same* page that jffs2_write_begin() is
13261327 * trying to write out, read_cache_page() will not deadlock. */
13271328 mutex_unlock(&f->sem);
1328
- pg_ptr = jffs2_gc_fetch_page(c, f, start, &pg);
1329
- mutex_lock(&f->sem);
1330
-
1331
- if (IS_ERR(pg_ptr)) {
1329
+ page = read_cache_page(inode->i_mapping, start >> PAGE_SHIFT,
1330
+ jffs2_do_readpage_unlock, inode);
1331
+ if (IS_ERR(page)) {
13321332 pr_warn("read_cache_page() returned error: %ld\n",
1333
- PTR_ERR(pg_ptr));
1334
- return PTR_ERR(pg_ptr);
1333
+ PTR_ERR(page));
1334
+ mutex_lock(&f->sem);
1335
+ return PTR_ERR(page);
13351336 }
1337
+
1338
+ pg_ptr = kmap(page);
1339
+ mutex_lock(&f->sem);
13361340
13371341 offset = start;
13381342 while(offset < orig_end) {
....@@ -1396,6 +1400,7 @@
13961400 }
13971401 }
13981402
1399
- jffs2_gc_release_page(c, pg_ptr, &pg);
1403
+ kunmap(page);
1404
+ put_page(page);
14001405 return ret;
14011406 }