segment.c 145 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * fs/f2fs/segment.c
  4. *
  5. * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  6. * http://www.samsung.com/
  7. */
  8. #include <linux/fs.h>
  9. #include <linux/f2fs_fs.h>
  10. #include <linux/bio.h>
  11. #include <linux/blkdev.h>
  12. #include <linux/sched/mm.h>
  13. #include <linux/prefetch.h>
  14. #include <linux/kthread.h>
  15. #include <linux/swap.h>
  16. #include <linux/timer.h>
  17. #include <linux/freezer.h>
  18. #include <linux/sched/signal.h>
  19. #include <linux/random.h>
  20. #include "f2fs.h"
  21. #include "segment.h"
  22. #include "node.h"
  23. #include "gc.h"
  24. #include "iostat.h"
  25. #include <trace/events/f2fs.h>
  26. #define __reverse_ffz(x) __reverse_ffs(~(x))
  27. static struct kmem_cache *discard_entry_slab;
  28. static struct kmem_cache *discard_cmd_slab;
  29. static struct kmem_cache *sit_entry_set_slab;
  30. static struct kmem_cache *revoke_entry_slab;
  31. static unsigned long __reverse_ulong(unsigned char *str)
  32. {
  33. unsigned long tmp = 0;
  34. int shift = 24, idx = 0;
  35. #if BITS_PER_LONG == 64
  36. shift = 56;
  37. #endif
  38. while (shift >= 0) {
  39. tmp |= (unsigned long)str[idx++] << shift;
  40. shift -= BITS_PER_BYTE;
  41. }
  42. return tmp;
  43. }
  44. /*
  45. * __reverse_ffs is copied from include/asm-generic/bitops/__ffs.h since
  46. * MSB and LSB are reversed in a byte by f2fs_set_bit.
  47. */
  48. static inline unsigned long __reverse_ffs(unsigned long word)
  49. {
  50. int num = 0;
  51. #if BITS_PER_LONG == 64
  52. if ((word & 0xffffffff00000000UL) == 0)
  53. num += 32;
  54. else
  55. word >>= 32;
  56. #endif
  57. if ((word & 0xffff0000) == 0)
  58. num += 16;
  59. else
  60. word >>= 16;
  61. if ((word & 0xff00) == 0)
  62. num += 8;
  63. else
  64. word >>= 8;
  65. if ((word & 0xf0) == 0)
  66. num += 4;
  67. else
  68. word >>= 4;
  69. if ((word & 0xc) == 0)
  70. num += 2;
  71. else
  72. word >>= 2;
  73. if ((word & 0x2) == 0)
  74. num += 1;
  75. return num;
  76. }
  77. /*
  78. * __find_rev_next(_zero)_bit is copied from lib/find_next_bit.c because
  79. * f2fs_set_bit makes MSB and LSB reversed in a byte.
  80. * @size must be integral times of unsigned long.
  81. * Example:
  82. * MSB <--> LSB
  83. * f2fs_set_bit(0, bitmap) => 1000 0000
  84. * f2fs_set_bit(7, bitmap) => 0000 0001
  85. */
  86. static unsigned long __find_rev_next_bit(const unsigned long *addr,
  87. unsigned long size, unsigned long offset)
  88. {
  89. const unsigned long *p = addr + BIT_WORD(offset);
  90. unsigned long result = size;
  91. unsigned long tmp;
  92. if (offset >= size)
  93. return size;
  94. size -= (offset & ~(BITS_PER_LONG - 1));
  95. offset %= BITS_PER_LONG;
  96. while (1) {
  97. if (*p == 0)
  98. goto pass;
  99. tmp = __reverse_ulong((unsigned char *)p);
  100. tmp &= ~0UL >> offset;
  101. if (size < BITS_PER_LONG)
  102. tmp &= (~0UL << (BITS_PER_LONG - size));
  103. if (tmp)
  104. goto found;
  105. pass:
  106. if (size <= BITS_PER_LONG)
  107. break;
  108. size -= BITS_PER_LONG;
  109. offset = 0;
  110. p++;
  111. }
  112. return result;
  113. found:
  114. return result - size + __reverse_ffs(tmp);
  115. }
  116. static unsigned long __find_rev_next_zero_bit(const unsigned long *addr,
  117. unsigned long size, unsigned long offset)
  118. {
  119. const unsigned long *p = addr + BIT_WORD(offset);
  120. unsigned long result = size;
  121. unsigned long tmp;
  122. if (offset >= size)
  123. return size;
  124. size -= (offset & ~(BITS_PER_LONG - 1));
  125. offset %= BITS_PER_LONG;
  126. while (1) {
  127. if (*p == ~0UL)
  128. goto pass;
  129. tmp = __reverse_ulong((unsigned char *)p);
  130. if (offset)
  131. tmp |= ~0UL << (BITS_PER_LONG - offset);
  132. if (size < BITS_PER_LONG)
  133. tmp |= ~0UL >> size;
  134. if (tmp != ~0UL)
  135. goto found;
  136. pass:
  137. if (size <= BITS_PER_LONG)
  138. break;
  139. size -= BITS_PER_LONG;
  140. offset = 0;
  141. p++;
  142. }
  143. return result;
  144. found:
  145. return result - size + __reverse_ffz(tmp);
  146. }
  147. bool f2fs_need_SSR(struct f2fs_sb_info *sbi)
  148. {
  149. int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES);
  150. int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);
  151. int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);
  152. if (f2fs_lfs_mode(sbi))
  153. return false;
  154. if (sbi->gc_mode == GC_URGENT_HIGH)
  155. return true;
  156. if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
  157. return true;
  158. return free_sections(sbi) <= (node_secs + 2 * dent_secs + imeta_secs +
  159. SM_I(sbi)->min_ssr_sections + reserved_sections(sbi));
  160. }
  161. void f2fs_abort_atomic_write(struct inode *inode, bool clean)
  162. {
  163. struct f2fs_inode_info *fi = F2FS_I(inode);
  164. if (!f2fs_is_atomic_file(inode))
  165. return;
  166. if (clean)
  167. truncate_inode_pages_final(inode->i_mapping);
  168. release_atomic_write_cnt(inode);
  169. clear_inode_flag(inode, FI_ATOMIC_COMMITTED);
  170. clear_inode_flag(inode, FI_ATOMIC_REPLACE);
  171. clear_inode_flag(inode, FI_ATOMIC_FILE);
  172. if (is_inode_flag_set(inode, FI_ATOMIC_DIRTIED)) {
  173. clear_inode_flag(inode, FI_ATOMIC_DIRTIED);
  174. f2fs_mark_inode_dirty_sync(inode, true);
  175. }
  176. stat_dec_atomic_inode(inode);
  177. F2FS_I(inode)->atomic_write_task = NULL;
  178. if (clean) {
  179. f2fs_i_size_write(inode, fi->original_i_size);
  180. fi->original_i_size = 0;
  181. }
  182. /* avoid stale dirty inode during eviction */
  183. sync_inode_metadata(inode, 0);
  184. }
  185. static int __replace_atomic_write_block(struct inode *inode, pgoff_t index,
  186. block_t new_addr, block_t *old_addr, bool recover)
  187. {
  188. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  189. struct dnode_of_data dn;
  190. struct node_info ni;
  191. int err;
  192. retry:
  193. set_new_dnode(&dn, inode, NULL, NULL, 0);
  194. err = f2fs_get_dnode_of_data(&dn, index, ALLOC_NODE);
  195. if (err) {
  196. if (err == -ENOMEM) {
  197. f2fs_io_schedule_timeout(DEFAULT_IO_TIMEOUT);
  198. goto retry;
  199. }
  200. return err;
  201. }
  202. err = f2fs_get_node_info(sbi, dn.nid, &ni, false);
  203. if (err) {
  204. f2fs_put_dnode(&dn);
  205. return err;
  206. }
  207. if (recover) {
  208. /* dn.data_blkaddr is always valid */
  209. if (!__is_valid_data_blkaddr(new_addr)) {
  210. if (new_addr == NULL_ADDR)
  211. dec_valid_block_count(sbi, inode, 1);
  212. f2fs_invalidate_blocks(sbi, dn.data_blkaddr);
  213. f2fs_update_data_blkaddr(&dn, new_addr);
  214. } else {
  215. f2fs_replace_block(sbi, &dn, dn.data_blkaddr,
  216. new_addr, ni.version, true, true);
  217. }
  218. } else {
  219. blkcnt_t count = 1;
  220. err = inc_valid_block_count(sbi, inode, &count, true);
  221. if (err) {
  222. f2fs_put_dnode(&dn);
  223. return err;
  224. }
  225. *old_addr = dn.data_blkaddr;
  226. f2fs_truncate_data_blocks_range(&dn, 1);
  227. dec_valid_block_count(sbi, F2FS_I(inode)->cow_inode, count);
  228. f2fs_replace_block(sbi, &dn, dn.data_blkaddr, new_addr,
  229. ni.version, true, false);
  230. }
  231. f2fs_put_dnode(&dn);
  232. trace_f2fs_replace_atomic_write_block(inode, F2FS_I(inode)->cow_inode,
  233. index, old_addr ? *old_addr : 0, new_addr, recover);
  234. return 0;
  235. }
  236. static void __complete_revoke_list(struct inode *inode, struct list_head *head,
  237. bool revoke)
  238. {
  239. struct revoke_entry *cur, *tmp;
  240. pgoff_t start_index = 0;
  241. bool truncate = is_inode_flag_set(inode, FI_ATOMIC_REPLACE);
  242. list_for_each_entry_safe(cur, tmp, head, list) {
  243. if (revoke) {
  244. __replace_atomic_write_block(inode, cur->index,
  245. cur->old_addr, NULL, true);
  246. } else if (truncate) {
  247. f2fs_truncate_hole(inode, start_index, cur->index);
  248. start_index = cur->index + 1;
  249. }
  250. list_del(&cur->list);
  251. kmem_cache_free(revoke_entry_slab, cur);
  252. }
  253. if (!revoke && truncate)
  254. f2fs_do_truncate_blocks(inode, start_index * PAGE_SIZE, false);
  255. }
  256. static int __f2fs_commit_atomic_write(struct inode *inode)
  257. {
  258. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  259. struct f2fs_inode_info *fi = F2FS_I(inode);
  260. struct inode *cow_inode = fi->cow_inode;
  261. struct revoke_entry *new;
  262. struct list_head revoke_list;
  263. block_t blkaddr;
  264. struct dnode_of_data dn;
  265. pgoff_t len = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
  266. pgoff_t off = 0, blen, index;
  267. int ret = 0, i;
  268. INIT_LIST_HEAD(&revoke_list);
  269. while (len) {
  270. blen = min_t(pgoff_t, ADDRS_PER_BLOCK(cow_inode), len);
  271. set_new_dnode(&dn, cow_inode, NULL, NULL, 0);
  272. ret = f2fs_get_dnode_of_data(&dn, off, LOOKUP_NODE_RA);
  273. if (ret && ret != -ENOENT) {
  274. goto out;
  275. } else if (ret == -ENOENT) {
  276. ret = 0;
  277. if (dn.max_level == 0)
  278. goto out;
  279. goto next;
  280. }
  281. blen = min((pgoff_t)ADDRS_PER_PAGE(dn.node_page, cow_inode),
  282. len);
  283. index = off;
  284. for (i = 0; i < blen; i++, dn.ofs_in_node++, index++) {
  285. blkaddr = f2fs_data_blkaddr(&dn);
  286. if (!__is_valid_data_blkaddr(blkaddr)) {
  287. continue;
  288. } else if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
  289. DATA_GENERIC_ENHANCE)) {
  290. f2fs_put_dnode(&dn);
  291. ret = -EFSCORRUPTED;
  292. goto out;
  293. }
  294. new = f2fs_kmem_cache_alloc(revoke_entry_slab, GFP_NOFS,
  295. true, NULL);
  296. ret = __replace_atomic_write_block(inode, index, blkaddr,
  297. &new->old_addr, false);
  298. if (ret) {
  299. f2fs_put_dnode(&dn);
  300. kmem_cache_free(revoke_entry_slab, new);
  301. goto out;
  302. }
  303. f2fs_update_data_blkaddr(&dn, NULL_ADDR);
  304. new->index = index;
  305. list_add_tail(&new->list, &revoke_list);
  306. }
  307. f2fs_put_dnode(&dn);
  308. next:
  309. off += blen;
  310. len -= blen;
  311. }
  312. out:
  313. if (ret) {
  314. sbi->revoked_atomic_block += fi->atomic_write_cnt;
  315. } else {
  316. sbi->committed_atomic_block += fi->atomic_write_cnt;
  317. set_inode_flag(inode, FI_ATOMIC_COMMITTED);
  318. if (is_inode_flag_set(inode, FI_ATOMIC_DIRTIED)) {
  319. clear_inode_flag(inode, FI_ATOMIC_DIRTIED);
  320. f2fs_mark_inode_dirty_sync(inode, true);
  321. }
  322. }
  323. __complete_revoke_list(inode, &revoke_list, ret ? true : false);
  324. return ret;
  325. }
  326. int f2fs_commit_atomic_write(struct inode *inode)
  327. {
  328. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  329. struct f2fs_inode_info *fi = F2FS_I(inode);
  330. int err;
  331. err = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
  332. if (err)
  333. return err;
  334. f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
  335. f2fs_lock_op(sbi);
  336. err = __f2fs_commit_atomic_write(inode);
  337. f2fs_unlock_op(sbi);
  338. f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
  339. return err;
  340. }
  341. /*
  342. * This function balances dirty node and dentry pages.
  343. * In addition, it controls garbage collection.
  344. */
  345. void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need)
  346. {
  347. if (f2fs_cp_error(sbi))
  348. return;
  349. if (time_to_inject(sbi, FAULT_CHECKPOINT))
  350. f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_FAULT_INJECT);
  351. /* balance_fs_bg is able to be pending */
  352. if (need && excess_cached_nats(sbi))
  353. f2fs_balance_fs_bg(sbi, false);
  354. if (!f2fs_is_checkpoint_ready(sbi))
  355. return;
  356. /*
  357. * We should do GC or end up with checkpoint, if there are so many dirty
  358. * dir/node pages without enough free segments.
  359. */
  360. if (has_enough_free_secs(sbi, 0, 0))
  361. return;
  362. if (test_opt(sbi, GC_MERGE) && sbi->gc_thread &&
  363. sbi->gc_thread->f2fs_gc_task) {
  364. DEFINE_WAIT(wait);
  365. prepare_to_wait(&sbi->gc_thread->fggc_wq, &wait,
  366. TASK_UNINTERRUPTIBLE);
  367. wake_up(&sbi->gc_thread->gc_wait_queue_head);
  368. io_schedule();
  369. finish_wait(&sbi->gc_thread->fggc_wq, &wait);
  370. } else {
  371. struct f2fs_gc_control gc_control = {
  372. .victim_segno = NULL_SEGNO,
  373. .init_gc_type = BG_GC,
  374. .no_bg_gc = true,
  375. .should_migrate_blocks = false,
  376. .err_gc_skipped = false,
  377. .nr_free_secs = 1 };
  378. f2fs_down_write(&sbi->gc_lock);
  379. stat_inc_gc_call_count(sbi, FOREGROUND);
  380. f2fs_gc(sbi, &gc_control);
  381. }
  382. }
  383. static inline bool excess_dirty_threshold(struct f2fs_sb_info *sbi)
  384. {
  385. int factor = f2fs_rwsem_is_locked(&sbi->cp_rwsem) ? 3 : 2;
  386. unsigned int dents = get_pages(sbi, F2FS_DIRTY_DENTS);
  387. unsigned int qdata = get_pages(sbi, F2FS_DIRTY_QDATA);
  388. unsigned int nodes = get_pages(sbi, F2FS_DIRTY_NODES);
  389. unsigned int meta = get_pages(sbi, F2FS_DIRTY_META);
  390. unsigned int imeta = get_pages(sbi, F2FS_DIRTY_IMETA);
  391. unsigned int threshold =
  392. SEGS_TO_BLKS(sbi, (factor * DEFAULT_DIRTY_THRESHOLD));
  393. unsigned int global_threshold = threshold * 3 / 2;
  394. if (dents >= threshold || qdata >= threshold ||
  395. nodes >= threshold || meta >= threshold ||
  396. imeta >= threshold)
  397. return true;
  398. return dents + qdata + nodes + meta + imeta > global_threshold;
  399. }
  400. void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi, bool from_bg)
  401. {
  402. if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
  403. return;
  404. /* try to shrink extent cache when there is no enough memory */
  405. if (!f2fs_available_free_memory(sbi, READ_EXTENT_CACHE))
  406. f2fs_shrink_read_extent_tree(sbi,
  407. READ_EXTENT_CACHE_SHRINK_NUMBER);
  408. /* try to shrink age extent cache when there is no enough memory */
  409. if (!f2fs_available_free_memory(sbi, AGE_EXTENT_CACHE))
  410. f2fs_shrink_age_extent_tree(sbi,
  411. AGE_EXTENT_CACHE_SHRINK_NUMBER);
  412. /* check the # of cached NAT entries */
  413. if (!f2fs_available_free_memory(sbi, NAT_ENTRIES))
  414. f2fs_try_to_free_nats(sbi, NAT_ENTRY_PER_BLOCK);
  415. if (!f2fs_available_free_memory(sbi, FREE_NIDS))
  416. f2fs_try_to_free_nids(sbi, MAX_FREE_NIDS);
  417. else
  418. f2fs_build_free_nids(sbi, false, false);
  419. if (excess_dirty_nats(sbi) || excess_dirty_threshold(sbi) ||
  420. excess_prefree_segs(sbi) || !f2fs_space_for_roll_forward(sbi))
  421. goto do_sync;
  422. /* there is background inflight IO or foreground operation recently */
  423. if (is_inflight_io(sbi, REQ_TIME) ||
  424. (!f2fs_time_over(sbi, REQ_TIME) && f2fs_rwsem_is_locked(&sbi->cp_rwsem)))
  425. return;
  426. /* exceed periodical checkpoint timeout threshold */
  427. if (f2fs_time_over(sbi, CP_TIME))
  428. goto do_sync;
  429. /* checkpoint is the only way to shrink partial cached entries */
  430. if (f2fs_available_free_memory(sbi, NAT_ENTRIES) &&
  431. f2fs_available_free_memory(sbi, INO_ENTRIES))
  432. return;
  433. do_sync:
  434. if (test_opt(sbi, DATA_FLUSH) && from_bg) {
  435. struct blk_plug plug;
  436. mutex_lock(&sbi->flush_lock);
  437. blk_start_plug(&plug);
  438. f2fs_sync_dirty_inodes(sbi, FILE_INODE, false);
  439. blk_finish_plug(&plug);
  440. mutex_unlock(&sbi->flush_lock);
  441. }
  442. stat_inc_cp_call_count(sbi, BACKGROUND);
  443. f2fs_sync_fs(sbi->sb, 1);
  444. }
  445. static int __submit_flush_wait(struct f2fs_sb_info *sbi,
  446. struct block_device *bdev)
  447. {
  448. int ret = blkdev_issue_flush(bdev);
  449. trace_f2fs_issue_flush(bdev, test_opt(sbi, NOBARRIER),
  450. test_opt(sbi, FLUSH_MERGE), ret);
  451. if (!ret)
  452. f2fs_update_iostat(sbi, NULL, FS_FLUSH_IO, 0);
  453. return ret;
  454. }
  455. static int submit_flush_wait(struct f2fs_sb_info *sbi, nid_t ino)
  456. {
  457. int ret = 0;
  458. int i;
  459. if (!f2fs_is_multi_device(sbi))
  460. return __submit_flush_wait(sbi, sbi->sb->s_bdev);
  461. for (i = 0; i < sbi->s_ndevs; i++) {
  462. if (!f2fs_is_dirty_device(sbi, ino, i, FLUSH_INO))
  463. continue;
  464. ret = __submit_flush_wait(sbi, FDEV(i).bdev);
  465. if (ret)
  466. break;
  467. }
  468. return ret;
  469. }
  470. static int issue_flush_thread(void *data)
  471. {
  472. struct f2fs_sb_info *sbi = data;
  473. struct flush_cmd_control *fcc = SM_I(sbi)->fcc_info;
  474. wait_queue_head_t *q = &fcc->flush_wait_queue;
  475. repeat:
  476. if (kthread_should_stop())
  477. return 0;
  478. if (!llist_empty(&fcc->issue_list)) {
  479. struct flush_cmd *cmd, *next;
  480. int ret;
  481. fcc->dispatch_list = llist_del_all(&fcc->issue_list);
  482. fcc->dispatch_list = llist_reverse_order(fcc->dispatch_list);
  483. cmd = llist_entry(fcc->dispatch_list, struct flush_cmd, llnode);
  484. ret = submit_flush_wait(sbi, cmd->ino);
  485. atomic_inc(&fcc->issued_flush);
  486. llist_for_each_entry_safe(cmd, next,
  487. fcc->dispatch_list, llnode) {
  488. cmd->ret = ret;
  489. complete(&cmd->wait);
  490. }
  491. fcc->dispatch_list = NULL;
  492. }
  493. wait_event_interruptible(*q,
  494. kthread_should_stop() || !llist_empty(&fcc->issue_list));
  495. goto repeat;
  496. }
  497. int f2fs_issue_flush(struct f2fs_sb_info *sbi, nid_t ino)
  498. {
  499. struct flush_cmd_control *fcc = SM_I(sbi)->fcc_info;
  500. struct flush_cmd cmd;
  501. int ret;
  502. if (test_opt(sbi, NOBARRIER))
  503. return 0;
  504. if (!test_opt(sbi, FLUSH_MERGE)) {
  505. atomic_inc(&fcc->queued_flush);
  506. ret = submit_flush_wait(sbi, ino);
  507. atomic_dec(&fcc->queued_flush);
  508. atomic_inc(&fcc->issued_flush);
  509. return ret;
  510. }
  511. if (atomic_inc_return(&fcc->queued_flush) == 1 ||
  512. f2fs_is_multi_device(sbi)) {
  513. ret = submit_flush_wait(sbi, ino);
  514. atomic_dec(&fcc->queued_flush);
  515. atomic_inc(&fcc->issued_flush);
  516. return ret;
  517. }
  518. cmd.ino = ino;
  519. init_completion(&cmd.wait);
  520. llist_add(&cmd.llnode, &fcc->issue_list);
  521. /*
  522. * update issue_list before we wake up issue_flush thread, this
  523. * smp_mb() pairs with another barrier in ___wait_event(), see
  524. * more details in comments of waitqueue_active().
  525. */
  526. smp_mb();
  527. if (waitqueue_active(&fcc->flush_wait_queue))
  528. wake_up(&fcc->flush_wait_queue);
  529. if (fcc->f2fs_issue_flush) {
  530. wait_for_completion(&cmd.wait);
  531. atomic_dec(&fcc->queued_flush);
  532. } else {
  533. struct llist_node *list;
  534. list = llist_del_all(&fcc->issue_list);
  535. if (!list) {
  536. wait_for_completion(&cmd.wait);
  537. atomic_dec(&fcc->queued_flush);
  538. } else {
  539. struct flush_cmd *tmp, *next;
  540. ret = submit_flush_wait(sbi, ino);
  541. llist_for_each_entry_safe(tmp, next, list, llnode) {
  542. if (tmp == &cmd) {
  543. cmd.ret = ret;
  544. atomic_dec(&fcc->queued_flush);
  545. continue;
  546. }
  547. tmp->ret = ret;
  548. complete(&tmp->wait);
  549. }
  550. }
  551. }
  552. return cmd.ret;
  553. }
  554. int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi)
  555. {
  556. dev_t dev = sbi->sb->s_bdev->bd_dev;
  557. struct flush_cmd_control *fcc;
  558. if (SM_I(sbi)->fcc_info) {
  559. fcc = SM_I(sbi)->fcc_info;
  560. if (fcc->f2fs_issue_flush)
  561. return 0;
  562. goto init_thread;
  563. }
  564. fcc = f2fs_kzalloc(sbi, sizeof(struct flush_cmd_control), GFP_KERNEL);
  565. if (!fcc)
  566. return -ENOMEM;
  567. atomic_set(&fcc->issued_flush, 0);
  568. atomic_set(&fcc->queued_flush, 0);
  569. init_waitqueue_head(&fcc->flush_wait_queue);
  570. init_llist_head(&fcc->issue_list);
  571. SM_I(sbi)->fcc_info = fcc;
  572. if (!test_opt(sbi, FLUSH_MERGE))
  573. return 0;
  574. init_thread:
  575. fcc->f2fs_issue_flush = kthread_run(issue_flush_thread, sbi,
  576. "f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev));
  577. if (IS_ERR(fcc->f2fs_issue_flush)) {
  578. int err = PTR_ERR(fcc->f2fs_issue_flush);
  579. fcc->f2fs_issue_flush = NULL;
  580. return err;
  581. }
  582. return 0;
  583. }
  584. void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free)
  585. {
  586. struct flush_cmd_control *fcc = SM_I(sbi)->fcc_info;
  587. if (fcc && fcc->f2fs_issue_flush) {
  588. struct task_struct *flush_thread = fcc->f2fs_issue_flush;
  589. fcc->f2fs_issue_flush = NULL;
  590. kthread_stop(flush_thread);
  591. }
  592. if (free) {
  593. kfree(fcc);
  594. SM_I(sbi)->fcc_info = NULL;
  595. }
  596. }
  597. int f2fs_flush_device_cache(struct f2fs_sb_info *sbi)
  598. {
  599. int ret = 0, i;
  600. if (!f2fs_is_multi_device(sbi))
  601. return 0;
  602. if (test_opt(sbi, NOBARRIER))
  603. return 0;
  604. for (i = 1; i < sbi->s_ndevs; i++) {
  605. int count = DEFAULT_RETRY_IO_COUNT;
  606. if (!f2fs_test_bit(i, (char *)&sbi->dirty_device))
  607. continue;
  608. do {
  609. ret = __submit_flush_wait(sbi, FDEV(i).bdev);
  610. if (ret)
  611. f2fs_io_schedule_timeout(DEFAULT_IO_TIMEOUT);
  612. } while (ret && --count);
  613. if (ret) {
  614. f2fs_stop_checkpoint(sbi, false,
  615. STOP_CP_REASON_FLUSH_FAIL);
  616. break;
  617. }
  618. spin_lock(&sbi->dev_lock);
  619. f2fs_clear_bit(i, (char *)&sbi->dirty_device);
  620. spin_unlock(&sbi->dev_lock);
  621. }
  622. return ret;
  623. }
  624. static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
  625. enum dirty_type dirty_type)
  626. {
  627. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  628. /* need not be added */
  629. if (IS_CURSEG(sbi, segno))
  630. return;
  631. if (!test_and_set_bit(segno, dirty_i->dirty_segmap[dirty_type]))
  632. dirty_i->nr_dirty[dirty_type]++;
  633. if (dirty_type == DIRTY) {
  634. struct seg_entry *sentry = get_seg_entry(sbi, segno);
  635. enum dirty_type t = sentry->type;
  636. if (unlikely(t >= DIRTY)) {
  637. f2fs_bug_on(sbi, 1);
  638. return;
  639. }
  640. if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t]))
  641. dirty_i->nr_dirty[t]++;
  642. if (__is_large_section(sbi)) {
  643. unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
  644. block_t valid_blocks =
  645. get_valid_blocks(sbi, segno, true);
  646. f2fs_bug_on(sbi,
  647. (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) &&
  648. !valid_blocks) ||
  649. valid_blocks == CAP_BLKS_PER_SEC(sbi));
  650. if (!IS_CURSEC(sbi, secno))
  651. set_bit(secno, dirty_i->dirty_secmap);
  652. }
  653. }
  654. }
  655. static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
  656. enum dirty_type dirty_type)
  657. {
  658. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  659. block_t valid_blocks;
  660. if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type]))
  661. dirty_i->nr_dirty[dirty_type]--;
  662. if (dirty_type == DIRTY) {
  663. struct seg_entry *sentry = get_seg_entry(sbi, segno);
  664. enum dirty_type t = sentry->type;
  665. if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t]))
  666. dirty_i->nr_dirty[t]--;
  667. valid_blocks = get_valid_blocks(sbi, segno, true);
  668. if (valid_blocks == 0) {
  669. clear_bit(GET_SEC_FROM_SEG(sbi, segno),
  670. dirty_i->victim_secmap);
  671. #ifdef CONFIG_F2FS_CHECK_FS
  672. clear_bit(segno, SIT_I(sbi)->invalid_segmap);
  673. #endif
  674. }
  675. if (__is_large_section(sbi)) {
  676. unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
  677. if (!valid_blocks ||
  678. valid_blocks == CAP_BLKS_PER_SEC(sbi)) {
  679. clear_bit(secno, dirty_i->dirty_secmap);
  680. return;
  681. }
  682. if (!IS_CURSEC(sbi, secno))
  683. set_bit(secno, dirty_i->dirty_secmap);
  684. }
  685. }
  686. }
  687. /*
  688. * Should not occur error such as -ENOMEM.
  689. * Adding dirty entry into seglist is not critical operation.
  690. * If a given segment is one of current working segments, it won't be added.
  691. */
  692. static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno)
  693. {
  694. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  695. unsigned short valid_blocks, ckpt_valid_blocks;
  696. unsigned int usable_blocks;
  697. if (segno == NULL_SEGNO || IS_CURSEG(sbi, segno))
  698. return;
  699. usable_blocks = f2fs_usable_blks_in_seg(sbi, segno);
  700. mutex_lock(&dirty_i->seglist_lock);
  701. valid_blocks = get_valid_blocks(sbi, segno, false);
  702. ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno, false);
  703. if (valid_blocks == 0 && (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) ||
  704. ckpt_valid_blocks == usable_blocks)) {
  705. __locate_dirty_segment(sbi, segno, PRE);
  706. __remove_dirty_segment(sbi, segno, DIRTY);
  707. } else if (valid_blocks < usable_blocks) {
  708. __locate_dirty_segment(sbi, segno, DIRTY);
  709. } else {
  710. /* Recovery routine with SSR needs this */
  711. __remove_dirty_segment(sbi, segno, DIRTY);
  712. }
  713. mutex_unlock(&dirty_i->seglist_lock);
  714. }
  715. /* This moves currently empty dirty blocks to prefree. Must hold seglist_lock */
  716. void f2fs_dirty_to_prefree(struct f2fs_sb_info *sbi)
  717. {
  718. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  719. unsigned int segno;
  720. mutex_lock(&dirty_i->seglist_lock);
  721. for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
  722. if (get_valid_blocks(sbi, segno, false))
  723. continue;
  724. if (IS_CURSEG(sbi, segno))
  725. continue;
  726. __locate_dirty_segment(sbi, segno, PRE);
  727. __remove_dirty_segment(sbi, segno, DIRTY);
  728. }
  729. mutex_unlock(&dirty_i->seglist_lock);
  730. }
  731. block_t f2fs_get_unusable_blocks(struct f2fs_sb_info *sbi)
  732. {
  733. int ovp_hole_segs =
  734. (overprovision_segments(sbi) - reserved_segments(sbi));
  735. block_t ovp_holes = SEGS_TO_BLKS(sbi, ovp_hole_segs);
  736. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  737. block_t holes[2] = {0, 0}; /* DATA and NODE */
  738. block_t unusable;
  739. struct seg_entry *se;
  740. unsigned int segno;
  741. mutex_lock(&dirty_i->seglist_lock);
  742. for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
  743. se = get_seg_entry(sbi, segno);
  744. if (IS_NODESEG(se->type))
  745. holes[NODE] += f2fs_usable_blks_in_seg(sbi, segno) -
  746. se->valid_blocks;
  747. else
  748. holes[DATA] += f2fs_usable_blks_in_seg(sbi, segno) -
  749. se->valid_blocks;
  750. }
  751. mutex_unlock(&dirty_i->seglist_lock);
  752. unusable = max(holes[DATA], holes[NODE]);
  753. if (unusable > ovp_holes)
  754. return unusable - ovp_holes;
  755. return 0;
  756. }
  757. int f2fs_disable_cp_again(struct f2fs_sb_info *sbi, block_t unusable)
  758. {
  759. int ovp_hole_segs =
  760. (overprovision_segments(sbi) - reserved_segments(sbi));
  761. if (F2FS_OPTION(sbi).unusable_cap_perc == 100)
  762. return 0;
  763. if (unusable > F2FS_OPTION(sbi).unusable_cap)
  764. return -EAGAIN;
  765. if (is_sbi_flag_set(sbi, SBI_CP_DISABLED_QUICK) &&
  766. dirty_segments(sbi) > ovp_hole_segs)
  767. return -EAGAIN;
  768. if (has_not_enough_free_secs(sbi, 0, 0))
  769. return -EAGAIN;
  770. return 0;
  771. }
  772. /* This is only used by SBI_CP_DISABLED */
  773. static unsigned int get_free_segment(struct f2fs_sb_info *sbi)
  774. {
  775. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  776. unsigned int segno = 0;
  777. mutex_lock(&dirty_i->seglist_lock);
  778. for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
  779. if (get_valid_blocks(sbi, segno, false))
  780. continue;
  781. if (get_ckpt_valid_blocks(sbi, segno, false))
  782. continue;
  783. mutex_unlock(&dirty_i->seglist_lock);
  784. return segno;
  785. }
  786. mutex_unlock(&dirty_i->seglist_lock);
  787. return NULL_SEGNO;
  788. }
  789. static struct discard_cmd *__create_discard_cmd(struct f2fs_sb_info *sbi,
  790. struct block_device *bdev, block_t lstart,
  791. block_t start, block_t len)
  792. {
  793. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  794. struct list_head *pend_list;
  795. struct discard_cmd *dc;
  796. f2fs_bug_on(sbi, !len);
  797. pend_list = &dcc->pend_list[plist_idx(len)];
  798. dc = f2fs_kmem_cache_alloc(discard_cmd_slab, GFP_NOFS, true, NULL);
  799. INIT_LIST_HEAD(&dc->list);
  800. dc->bdev = bdev;
  801. dc->di.lstart = lstart;
  802. dc->di.start = start;
  803. dc->di.len = len;
  804. dc->ref = 0;
  805. dc->state = D_PREP;
  806. dc->queued = 0;
  807. dc->error = 0;
  808. init_completion(&dc->wait);
  809. list_add_tail(&dc->list, pend_list);
  810. spin_lock_init(&dc->lock);
  811. dc->bio_ref = 0;
  812. atomic_inc(&dcc->discard_cmd_cnt);
  813. dcc->undiscard_blks += len;
  814. return dc;
  815. }
  816. static bool f2fs_check_discard_tree(struct f2fs_sb_info *sbi)
  817. {
  818. #ifdef CONFIG_F2FS_CHECK_FS
  819. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  820. struct rb_node *cur = rb_first_cached(&dcc->root), *next;
  821. struct discard_cmd *cur_dc, *next_dc;
  822. while (cur) {
  823. next = rb_next(cur);
  824. if (!next)
  825. return true;
  826. cur_dc = rb_entry(cur, struct discard_cmd, rb_node);
  827. next_dc = rb_entry(next, struct discard_cmd, rb_node);
  828. if (cur_dc->di.lstart + cur_dc->di.len > next_dc->di.lstart) {
  829. f2fs_info(sbi, "broken discard_rbtree, "
  830. "cur(%u, %u) next(%u, %u)",
  831. cur_dc->di.lstart, cur_dc->di.len,
  832. next_dc->di.lstart, next_dc->di.len);
  833. return false;
  834. }
  835. cur = next;
  836. }
  837. #endif
  838. return true;
  839. }
  840. static struct discard_cmd *__lookup_discard_cmd(struct f2fs_sb_info *sbi,
  841. block_t blkaddr)
  842. {
  843. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  844. struct rb_node *node = dcc->root.rb_root.rb_node;
  845. struct discard_cmd *dc;
  846. while (node) {
  847. dc = rb_entry(node, struct discard_cmd, rb_node);
  848. if (blkaddr < dc->di.lstart)
  849. node = node->rb_left;
  850. else if (blkaddr >= dc->di.lstart + dc->di.len)
  851. node = node->rb_right;
  852. else
  853. return dc;
  854. }
  855. return NULL;
  856. }
  857. static struct discard_cmd *__lookup_discard_cmd_ret(struct rb_root_cached *root,
  858. block_t blkaddr,
  859. struct discard_cmd **prev_entry,
  860. struct discard_cmd **next_entry,
  861. struct rb_node ***insert_p,
  862. struct rb_node **insert_parent)
  863. {
  864. struct rb_node **pnode = &root->rb_root.rb_node;
  865. struct rb_node *parent = NULL, *tmp_node;
  866. struct discard_cmd *dc;
  867. *insert_p = NULL;
  868. *insert_parent = NULL;
  869. *prev_entry = NULL;
  870. *next_entry = NULL;
  871. if (RB_EMPTY_ROOT(&root->rb_root))
  872. return NULL;
  873. while (*pnode) {
  874. parent = *pnode;
  875. dc = rb_entry(*pnode, struct discard_cmd, rb_node);
  876. if (blkaddr < dc->di.lstart)
  877. pnode = &(*pnode)->rb_left;
  878. else if (blkaddr >= dc->di.lstart + dc->di.len)
  879. pnode = &(*pnode)->rb_right;
  880. else
  881. goto lookup_neighbors;
  882. }
  883. *insert_p = pnode;
  884. *insert_parent = parent;
  885. dc = rb_entry(parent, struct discard_cmd, rb_node);
  886. tmp_node = parent;
  887. if (parent && blkaddr > dc->di.lstart)
  888. tmp_node = rb_next(parent);
  889. *next_entry = rb_entry_safe(tmp_node, struct discard_cmd, rb_node);
  890. tmp_node = parent;
  891. if (parent && blkaddr < dc->di.lstart)
  892. tmp_node = rb_prev(parent);
  893. *prev_entry = rb_entry_safe(tmp_node, struct discard_cmd, rb_node);
  894. return NULL;
  895. lookup_neighbors:
  896. /* lookup prev node for merging backward later */
  897. tmp_node = rb_prev(&dc->rb_node);
  898. *prev_entry = rb_entry_safe(tmp_node, struct discard_cmd, rb_node);
  899. /* lookup next node for merging frontward later */
  900. tmp_node = rb_next(&dc->rb_node);
  901. *next_entry = rb_entry_safe(tmp_node, struct discard_cmd, rb_node);
  902. return dc;
  903. }
  904. static void __detach_discard_cmd(struct discard_cmd_control *dcc,
  905. struct discard_cmd *dc)
  906. {
  907. if (dc->state == D_DONE)
  908. atomic_sub(dc->queued, &dcc->queued_discard);
  909. list_del(&dc->list);
  910. rb_erase_cached(&dc->rb_node, &dcc->root);
  911. dcc->undiscard_blks -= dc->di.len;
  912. kmem_cache_free(discard_cmd_slab, dc);
  913. atomic_dec(&dcc->discard_cmd_cnt);
  914. }
  915. static void __remove_discard_cmd(struct f2fs_sb_info *sbi,
  916. struct discard_cmd *dc)
  917. {
  918. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  919. unsigned long flags;
  920. trace_f2fs_remove_discard(dc->bdev, dc->di.start, dc->di.len);
  921. spin_lock_irqsave(&dc->lock, flags);
  922. if (dc->bio_ref) {
  923. spin_unlock_irqrestore(&dc->lock, flags);
  924. return;
  925. }
  926. spin_unlock_irqrestore(&dc->lock, flags);
  927. f2fs_bug_on(sbi, dc->ref);
  928. if (dc->error == -EOPNOTSUPP)
  929. dc->error = 0;
  930. if (dc->error)
  931. f2fs_info_ratelimited(sbi,
  932. "Issue discard(%u, %u, %u) failed, ret: %d",
  933. dc->di.lstart, dc->di.start, dc->di.len, dc->error);
  934. __detach_discard_cmd(dcc, dc);
  935. }
  936. static void f2fs_submit_discard_endio(struct bio *bio)
  937. {
  938. struct discard_cmd *dc = (struct discard_cmd *)bio->bi_private;
  939. unsigned long flags;
  940. spin_lock_irqsave(&dc->lock, flags);
  941. if (!dc->error)
  942. dc->error = blk_status_to_errno(bio->bi_status);
  943. dc->bio_ref--;
  944. if (!dc->bio_ref && dc->state == D_SUBMIT) {
  945. dc->state = D_DONE;
  946. complete_all(&dc->wait);
  947. }
  948. spin_unlock_irqrestore(&dc->lock, flags);
  949. bio_put(bio);
  950. }
  951. static void __check_sit_bitmap(struct f2fs_sb_info *sbi,
  952. block_t start, block_t end)
  953. {
  954. #ifdef CONFIG_F2FS_CHECK_FS
  955. struct seg_entry *sentry;
  956. unsigned int segno;
  957. block_t blk = start;
  958. unsigned long offset, size, *map;
  959. while (blk < end) {
  960. segno = GET_SEGNO(sbi, blk);
  961. sentry = get_seg_entry(sbi, segno);
  962. offset = GET_BLKOFF_FROM_SEG0(sbi, blk);
  963. if (end < START_BLOCK(sbi, segno + 1))
  964. size = GET_BLKOFF_FROM_SEG0(sbi, end);
  965. else
  966. size = BLKS_PER_SEG(sbi);
  967. map = (unsigned long *)(sentry->cur_valid_map);
  968. offset = __find_rev_next_bit(map, size, offset);
  969. f2fs_bug_on(sbi, offset != size);
  970. blk = START_BLOCK(sbi, segno + 1);
  971. }
  972. #endif
  973. }
  974. static void __init_discard_policy(struct f2fs_sb_info *sbi,
  975. struct discard_policy *dpolicy,
  976. int discard_type, unsigned int granularity)
  977. {
  978. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  979. /* common policy */
  980. dpolicy->type = discard_type;
  981. dpolicy->sync = true;
  982. dpolicy->ordered = false;
  983. dpolicy->granularity = granularity;
  984. dpolicy->max_requests = dcc->max_discard_request;
  985. dpolicy->io_aware_gran = dcc->discard_io_aware_gran;
  986. dpolicy->timeout = false;
  987. if (discard_type == DPOLICY_BG) {
  988. dpolicy->min_interval = dcc->min_discard_issue_time;
  989. dpolicy->mid_interval = dcc->mid_discard_issue_time;
  990. dpolicy->max_interval = dcc->max_discard_issue_time;
  991. if (dcc->discard_io_aware == DPOLICY_IO_AWARE_ENABLE)
  992. dpolicy->io_aware = true;
  993. else if (dcc->discard_io_aware == DPOLICY_IO_AWARE_DISABLE)
  994. dpolicy->io_aware = false;
  995. dpolicy->sync = false;
  996. dpolicy->ordered = true;
  997. if (utilization(sbi) > dcc->discard_urgent_util) {
  998. dpolicy->granularity = MIN_DISCARD_GRANULARITY;
  999. if (atomic_read(&dcc->discard_cmd_cnt))
  1000. dpolicy->max_interval =
  1001. dcc->min_discard_issue_time;
  1002. }
  1003. } else if (discard_type == DPOLICY_FORCE) {
  1004. dpolicy->min_interval = dcc->min_discard_issue_time;
  1005. dpolicy->mid_interval = dcc->mid_discard_issue_time;
  1006. dpolicy->max_interval = dcc->max_discard_issue_time;
  1007. dpolicy->io_aware = false;
  1008. } else if (discard_type == DPOLICY_FSTRIM) {
  1009. dpolicy->io_aware = false;
  1010. } else if (discard_type == DPOLICY_UMOUNT) {
  1011. dpolicy->io_aware = false;
  1012. /* we need to issue all to keep CP_TRIMMED_FLAG */
  1013. dpolicy->granularity = MIN_DISCARD_GRANULARITY;
  1014. dpolicy->timeout = true;
  1015. }
  1016. }
  1017. static void __update_discard_tree_range(struct f2fs_sb_info *sbi,
  1018. struct block_device *bdev, block_t lstart,
  1019. block_t start, block_t len);
  1020. #ifdef CONFIG_BLK_DEV_ZONED
  1021. static void __submit_zone_reset_cmd(struct f2fs_sb_info *sbi,
  1022. struct discard_cmd *dc, blk_opf_t flag,
  1023. struct list_head *wait_list,
  1024. unsigned int *issued)
  1025. {
  1026. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1027. struct block_device *bdev = dc->bdev;
  1028. struct bio *bio = bio_alloc(bdev, 0, REQ_OP_ZONE_RESET | flag, GFP_NOFS);
  1029. unsigned long flags;
  1030. trace_f2fs_issue_reset_zone(bdev, dc->di.start);
  1031. spin_lock_irqsave(&dc->lock, flags);
  1032. dc->state = D_SUBMIT;
  1033. dc->bio_ref++;
  1034. spin_unlock_irqrestore(&dc->lock, flags);
  1035. if (issued)
  1036. (*issued)++;
  1037. atomic_inc(&dcc->queued_discard);
  1038. dc->queued++;
  1039. list_move_tail(&dc->list, wait_list);
  1040. /* sanity check on discard range */
  1041. __check_sit_bitmap(sbi, dc->di.lstart, dc->di.lstart + dc->di.len);
  1042. bio->bi_iter.bi_sector = SECTOR_FROM_BLOCK(dc->di.start);
  1043. bio->bi_private = dc;
  1044. bio->bi_end_io = f2fs_submit_discard_endio;
  1045. submit_bio(bio);
  1046. atomic_inc(&dcc->issued_discard);
  1047. f2fs_update_iostat(sbi, NULL, FS_ZONE_RESET_IO, dc->di.len * F2FS_BLKSIZE);
  1048. }
  1049. #endif
  1050. /* this function is copied from blkdev_issue_discard from block/blk-lib.c */
  1051. static int __submit_discard_cmd(struct f2fs_sb_info *sbi,
  1052. struct discard_policy *dpolicy,
  1053. struct discard_cmd *dc, int *issued)
  1054. {
  1055. struct block_device *bdev = dc->bdev;
  1056. unsigned int max_discard_blocks =
  1057. SECTOR_TO_BLOCK(bdev_max_discard_sectors(bdev));
  1058. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1059. struct list_head *wait_list = (dpolicy->type == DPOLICY_FSTRIM) ?
  1060. &(dcc->fstrim_list) : &(dcc->wait_list);
  1061. blk_opf_t flag = dpolicy->sync ? REQ_SYNC : 0;
  1062. block_t lstart, start, len, total_len;
  1063. int err = 0;
  1064. if (dc->state != D_PREP)
  1065. return 0;
  1066. if (is_sbi_flag_set(sbi, SBI_NEED_FSCK))
  1067. return 0;
  1068. #ifdef CONFIG_BLK_DEV_ZONED
  1069. if (f2fs_sb_has_blkzoned(sbi) && bdev_is_zoned(bdev)) {
  1070. int devi = f2fs_bdev_index(sbi, bdev);
  1071. if (devi < 0)
  1072. return -EINVAL;
  1073. if (f2fs_blkz_is_seq(sbi, devi, dc->di.start)) {
  1074. __submit_zone_reset_cmd(sbi, dc, flag,
  1075. wait_list, issued);
  1076. return 0;
  1077. }
  1078. }
  1079. #endif
  1080. /*
  1081. * stop issuing discard for any of below cases:
  1082. * 1. device is conventional zone, but it doesn't support discard.
  1083. * 2. device is regulare device, after snapshot it doesn't support
  1084. * discard.
  1085. */
  1086. if (!bdev_max_discard_sectors(bdev))
  1087. return -EOPNOTSUPP;
  1088. trace_f2fs_issue_discard(bdev, dc->di.start, dc->di.len);
  1089. lstart = dc->di.lstart;
  1090. start = dc->di.start;
  1091. len = dc->di.len;
  1092. total_len = len;
  1093. dc->di.len = 0;
  1094. while (total_len && *issued < dpolicy->max_requests && !err) {
  1095. struct bio *bio = NULL;
  1096. unsigned long flags;
  1097. bool last = true;
  1098. if (len > max_discard_blocks) {
  1099. len = max_discard_blocks;
  1100. last = false;
  1101. }
  1102. (*issued)++;
  1103. if (*issued == dpolicy->max_requests)
  1104. last = true;
  1105. dc->di.len += len;
  1106. if (time_to_inject(sbi, FAULT_DISCARD)) {
  1107. err = -EIO;
  1108. } else {
  1109. err = __blkdev_issue_discard(bdev,
  1110. SECTOR_FROM_BLOCK(start),
  1111. SECTOR_FROM_BLOCK(len),
  1112. GFP_NOFS, &bio);
  1113. }
  1114. if (err) {
  1115. spin_lock_irqsave(&dc->lock, flags);
  1116. if (dc->state == D_PARTIAL)
  1117. dc->state = D_SUBMIT;
  1118. spin_unlock_irqrestore(&dc->lock, flags);
  1119. break;
  1120. }
  1121. f2fs_bug_on(sbi, !bio);
  1122. /*
  1123. * should keep before submission to avoid D_DONE
  1124. * right away
  1125. */
  1126. spin_lock_irqsave(&dc->lock, flags);
  1127. if (last)
  1128. dc->state = D_SUBMIT;
  1129. else
  1130. dc->state = D_PARTIAL;
  1131. dc->bio_ref++;
  1132. spin_unlock_irqrestore(&dc->lock, flags);
  1133. atomic_inc(&dcc->queued_discard);
  1134. dc->queued++;
  1135. list_move_tail(&dc->list, wait_list);
  1136. /* sanity check on discard range */
  1137. __check_sit_bitmap(sbi, lstart, lstart + len);
  1138. bio->bi_private = dc;
  1139. bio->bi_end_io = f2fs_submit_discard_endio;
  1140. bio->bi_opf |= flag;
  1141. submit_bio(bio);
  1142. atomic_inc(&dcc->issued_discard);
  1143. f2fs_update_iostat(sbi, NULL, FS_DISCARD_IO, len * F2FS_BLKSIZE);
  1144. lstart += len;
  1145. start += len;
  1146. total_len -= len;
  1147. len = total_len;
  1148. }
  1149. if (!err && len) {
  1150. dcc->undiscard_blks -= len;
  1151. __update_discard_tree_range(sbi, bdev, lstart, start, len);
  1152. }
  1153. return err;
  1154. }
  1155. static void __insert_discard_cmd(struct f2fs_sb_info *sbi,
  1156. struct block_device *bdev, block_t lstart,
  1157. block_t start, block_t len)
  1158. {
  1159. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1160. struct rb_node **p = &dcc->root.rb_root.rb_node;
  1161. struct rb_node *parent = NULL;
  1162. struct discard_cmd *dc;
  1163. bool leftmost = true;
  1164. /* look up rb tree to find parent node */
  1165. while (*p) {
  1166. parent = *p;
  1167. dc = rb_entry(parent, struct discard_cmd, rb_node);
  1168. if (lstart < dc->di.lstart) {
  1169. p = &(*p)->rb_left;
  1170. } else if (lstart >= dc->di.lstart + dc->di.len) {
  1171. p = &(*p)->rb_right;
  1172. leftmost = false;
  1173. } else {
  1174. /* Let's skip to add, if exists */
  1175. return;
  1176. }
  1177. }
  1178. dc = __create_discard_cmd(sbi, bdev, lstart, start, len);
  1179. rb_link_node(&dc->rb_node, parent, p);
  1180. rb_insert_color_cached(&dc->rb_node, &dcc->root, leftmost);
  1181. }
  1182. static void __relocate_discard_cmd(struct discard_cmd_control *dcc,
  1183. struct discard_cmd *dc)
  1184. {
  1185. list_move_tail(&dc->list, &dcc->pend_list[plist_idx(dc->di.len)]);
  1186. }
  1187. static void __punch_discard_cmd(struct f2fs_sb_info *sbi,
  1188. struct discard_cmd *dc, block_t blkaddr)
  1189. {
  1190. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1191. struct discard_info di = dc->di;
  1192. bool modified = false;
  1193. if (dc->state == D_DONE || dc->di.len == 1) {
  1194. __remove_discard_cmd(sbi, dc);
  1195. return;
  1196. }
  1197. dcc->undiscard_blks -= di.len;
  1198. if (blkaddr > di.lstart) {
  1199. dc->di.len = blkaddr - dc->di.lstart;
  1200. dcc->undiscard_blks += dc->di.len;
  1201. __relocate_discard_cmd(dcc, dc);
  1202. modified = true;
  1203. }
  1204. if (blkaddr < di.lstart + di.len - 1) {
  1205. if (modified) {
  1206. __insert_discard_cmd(sbi, dc->bdev, blkaddr + 1,
  1207. di.start + blkaddr + 1 - di.lstart,
  1208. di.lstart + di.len - 1 - blkaddr);
  1209. } else {
  1210. dc->di.lstart++;
  1211. dc->di.len--;
  1212. dc->di.start++;
  1213. dcc->undiscard_blks += dc->di.len;
  1214. __relocate_discard_cmd(dcc, dc);
  1215. }
  1216. }
  1217. }
  1218. static void __update_discard_tree_range(struct f2fs_sb_info *sbi,
  1219. struct block_device *bdev, block_t lstart,
  1220. block_t start, block_t len)
  1221. {
  1222. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1223. struct discard_cmd *prev_dc = NULL, *next_dc = NULL;
  1224. struct discard_cmd *dc;
  1225. struct discard_info di = {0};
  1226. struct rb_node **insert_p = NULL, *insert_parent = NULL;
  1227. unsigned int max_discard_blocks =
  1228. SECTOR_TO_BLOCK(bdev_max_discard_sectors(bdev));
  1229. block_t end = lstart + len;
  1230. dc = __lookup_discard_cmd_ret(&dcc->root, lstart,
  1231. &prev_dc, &next_dc, &insert_p, &insert_parent);
  1232. if (dc)
  1233. prev_dc = dc;
  1234. if (!prev_dc) {
  1235. di.lstart = lstart;
  1236. di.len = next_dc ? next_dc->di.lstart - lstart : len;
  1237. di.len = min(di.len, len);
  1238. di.start = start;
  1239. }
  1240. while (1) {
  1241. struct rb_node *node;
  1242. bool merged = false;
  1243. struct discard_cmd *tdc = NULL;
  1244. if (prev_dc) {
  1245. di.lstart = prev_dc->di.lstart + prev_dc->di.len;
  1246. if (di.lstart < lstart)
  1247. di.lstart = lstart;
  1248. if (di.lstart >= end)
  1249. break;
  1250. if (!next_dc || next_dc->di.lstart > end)
  1251. di.len = end - di.lstart;
  1252. else
  1253. di.len = next_dc->di.lstart - di.lstart;
  1254. di.start = start + di.lstart - lstart;
  1255. }
  1256. if (!di.len)
  1257. goto next;
  1258. if (prev_dc && prev_dc->state == D_PREP &&
  1259. prev_dc->bdev == bdev &&
  1260. __is_discard_back_mergeable(&di, &prev_dc->di,
  1261. max_discard_blocks)) {
  1262. prev_dc->di.len += di.len;
  1263. dcc->undiscard_blks += di.len;
  1264. __relocate_discard_cmd(dcc, prev_dc);
  1265. di = prev_dc->di;
  1266. tdc = prev_dc;
  1267. merged = true;
  1268. }
  1269. if (next_dc && next_dc->state == D_PREP &&
  1270. next_dc->bdev == bdev &&
  1271. __is_discard_front_mergeable(&di, &next_dc->di,
  1272. max_discard_blocks)) {
  1273. next_dc->di.lstart = di.lstart;
  1274. next_dc->di.len += di.len;
  1275. next_dc->di.start = di.start;
  1276. dcc->undiscard_blks += di.len;
  1277. __relocate_discard_cmd(dcc, next_dc);
  1278. if (tdc)
  1279. __remove_discard_cmd(sbi, tdc);
  1280. merged = true;
  1281. }
  1282. if (!merged)
  1283. __insert_discard_cmd(sbi, bdev,
  1284. di.lstart, di.start, di.len);
  1285. next:
  1286. prev_dc = next_dc;
  1287. if (!prev_dc)
  1288. break;
  1289. node = rb_next(&prev_dc->rb_node);
  1290. next_dc = rb_entry_safe(node, struct discard_cmd, rb_node);
  1291. }
  1292. }
  1293. #ifdef CONFIG_BLK_DEV_ZONED
  1294. static void __queue_zone_reset_cmd(struct f2fs_sb_info *sbi,
  1295. struct block_device *bdev, block_t blkstart, block_t lblkstart,
  1296. block_t blklen)
  1297. {
  1298. trace_f2fs_queue_reset_zone(bdev, blkstart);
  1299. mutex_lock(&SM_I(sbi)->dcc_info->cmd_lock);
  1300. __insert_discard_cmd(sbi, bdev, lblkstart, blkstart, blklen);
  1301. mutex_unlock(&SM_I(sbi)->dcc_info->cmd_lock);
  1302. }
  1303. #endif
  1304. static void __queue_discard_cmd(struct f2fs_sb_info *sbi,
  1305. struct block_device *bdev, block_t blkstart, block_t blklen)
  1306. {
  1307. block_t lblkstart = blkstart;
  1308. if (!f2fs_bdev_support_discard(bdev))
  1309. return;
  1310. trace_f2fs_queue_discard(bdev, blkstart, blklen);
  1311. if (f2fs_is_multi_device(sbi)) {
  1312. int devi = f2fs_target_device_index(sbi, blkstart);
  1313. blkstart -= FDEV(devi).start_blk;
  1314. }
  1315. mutex_lock(&SM_I(sbi)->dcc_info->cmd_lock);
  1316. __update_discard_tree_range(sbi, bdev, lblkstart, blkstart, blklen);
  1317. mutex_unlock(&SM_I(sbi)->dcc_info->cmd_lock);
  1318. }
  1319. static void __issue_discard_cmd_orderly(struct f2fs_sb_info *sbi,
  1320. struct discard_policy *dpolicy, int *issued)
  1321. {
  1322. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1323. struct discard_cmd *prev_dc = NULL, *next_dc = NULL;
  1324. struct rb_node **insert_p = NULL, *insert_parent = NULL;
  1325. struct discard_cmd *dc;
  1326. struct blk_plug plug;
  1327. bool io_interrupted = false;
  1328. mutex_lock(&dcc->cmd_lock);
  1329. dc = __lookup_discard_cmd_ret(&dcc->root, dcc->next_pos,
  1330. &prev_dc, &next_dc, &insert_p, &insert_parent);
  1331. if (!dc)
  1332. dc = next_dc;
  1333. blk_start_plug(&plug);
  1334. while (dc) {
  1335. struct rb_node *node;
  1336. int err = 0;
  1337. if (dc->state != D_PREP)
  1338. goto next;
  1339. if (dpolicy->io_aware && !is_idle(sbi, DISCARD_TIME)) {
  1340. io_interrupted = true;
  1341. break;
  1342. }
  1343. dcc->next_pos = dc->di.lstart + dc->di.len;
  1344. err = __submit_discard_cmd(sbi, dpolicy, dc, issued);
  1345. if (*issued >= dpolicy->max_requests)
  1346. break;
  1347. next:
  1348. node = rb_next(&dc->rb_node);
  1349. if (err)
  1350. __remove_discard_cmd(sbi, dc);
  1351. dc = rb_entry_safe(node, struct discard_cmd, rb_node);
  1352. }
  1353. blk_finish_plug(&plug);
  1354. if (!dc)
  1355. dcc->next_pos = 0;
  1356. mutex_unlock(&dcc->cmd_lock);
  1357. if (!(*issued) && io_interrupted)
  1358. *issued = -1;
  1359. }
  1360. static unsigned int __wait_all_discard_cmd(struct f2fs_sb_info *sbi,
  1361. struct discard_policy *dpolicy);
  1362. static int __issue_discard_cmd(struct f2fs_sb_info *sbi,
  1363. struct discard_policy *dpolicy)
  1364. {
  1365. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1366. struct list_head *pend_list;
  1367. struct discard_cmd *dc, *tmp;
  1368. struct blk_plug plug;
  1369. int i, issued;
  1370. bool io_interrupted = false;
  1371. if (dpolicy->timeout)
  1372. f2fs_update_time(sbi, UMOUNT_DISCARD_TIMEOUT);
  1373. retry:
  1374. issued = 0;
  1375. for (i = MAX_PLIST_NUM - 1; i >= 0; i--) {
  1376. if (dpolicy->timeout &&
  1377. f2fs_time_over(sbi, UMOUNT_DISCARD_TIMEOUT))
  1378. break;
  1379. if (i + 1 < dpolicy->granularity)
  1380. break;
  1381. if (i + 1 < dcc->max_ordered_discard && dpolicy->ordered) {
  1382. __issue_discard_cmd_orderly(sbi, dpolicy, &issued);
  1383. return issued;
  1384. }
  1385. pend_list = &dcc->pend_list[i];
  1386. mutex_lock(&dcc->cmd_lock);
  1387. if (list_empty(pend_list))
  1388. goto next;
  1389. if (unlikely(dcc->rbtree_check))
  1390. f2fs_bug_on(sbi, !f2fs_check_discard_tree(sbi));
  1391. blk_start_plug(&plug);
  1392. list_for_each_entry_safe(dc, tmp, pend_list, list) {
  1393. f2fs_bug_on(sbi, dc->state != D_PREP);
  1394. if (dpolicy->timeout &&
  1395. f2fs_time_over(sbi, UMOUNT_DISCARD_TIMEOUT))
  1396. break;
  1397. if (dpolicy->io_aware && i < dpolicy->io_aware_gran &&
  1398. !is_idle(sbi, DISCARD_TIME)) {
  1399. io_interrupted = true;
  1400. break;
  1401. }
  1402. __submit_discard_cmd(sbi, dpolicy, dc, &issued);
  1403. if (issued >= dpolicy->max_requests)
  1404. break;
  1405. }
  1406. blk_finish_plug(&plug);
  1407. next:
  1408. mutex_unlock(&dcc->cmd_lock);
  1409. if (issued >= dpolicy->max_requests || io_interrupted)
  1410. break;
  1411. }
  1412. if (dpolicy->type == DPOLICY_UMOUNT && issued) {
  1413. __wait_all_discard_cmd(sbi, dpolicy);
  1414. goto retry;
  1415. }
  1416. if (!issued && io_interrupted)
  1417. issued = -1;
  1418. return issued;
  1419. }
  1420. static bool __drop_discard_cmd(struct f2fs_sb_info *sbi)
  1421. {
  1422. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1423. struct list_head *pend_list;
  1424. struct discard_cmd *dc, *tmp;
  1425. int i;
  1426. bool dropped = false;
  1427. mutex_lock(&dcc->cmd_lock);
  1428. for (i = MAX_PLIST_NUM - 1; i >= 0; i--) {
  1429. pend_list = &dcc->pend_list[i];
  1430. list_for_each_entry_safe(dc, tmp, pend_list, list) {
  1431. f2fs_bug_on(sbi, dc->state != D_PREP);
  1432. __remove_discard_cmd(sbi, dc);
  1433. dropped = true;
  1434. }
  1435. }
  1436. mutex_unlock(&dcc->cmd_lock);
  1437. return dropped;
  1438. }
  1439. void f2fs_drop_discard_cmd(struct f2fs_sb_info *sbi)
  1440. {
  1441. __drop_discard_cmd(sbi);
  1442. }
  1443. static unsigned int __wait_one_discard_bio(struct f2fs_sb_info *sbi,
  1444. struct discard_cmd *dc)
  1445. {
  1446. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1447. unsigned int len = 0;
  1448. wait_for_completion_io(&dc->wait);
  1449. mutex_lock(&dcc->cmd_lock);
  1450. f2fs_bug_on(sbi, dc->state != D_DONE);
  1451. dc->ref--;
  1452. if (!dc->ref) {
  1453. if (!dc->error)
  1454. len = dc->di.len;
  1455. __remove_discard_cmd(sbi, dc);
  1456. }
  1457. mutex_unlock(&dcc->cmd_lock);
  1458. return len;
  1459. }
  1460. static unsigned int __wait_discard_cmd_range(struct f2fs_sb_info *sbi,
  1461. struct discard_policy *dpolicy,
  1462. block_t start, block_t end)
  1463. {
  1464. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1465. struct list_head *wait_list = (dpolicy->type == DPOLICY_FSTRIM) ?
  1466. &(dcc->fstrim_list) : &(dcc->wait_list);
  1467. struct discard_cmd *dc = NULL, *iter, *tmp;
  1468. unsigned int trimmed = 0;
  1469. next:
  1470. dc = NULL;
  1471. mutex_lock(&dcc->cmd_lock);
  1472. list_for_each_entry_safe(iter, tmp, wait_list, list) {
  1473. if (iter->di.lstart + iter->di.len <= start ||
  1474. end <= iter->di.lstart)
  1475. continue;
  1476. if (iter->di.len < dpolicy->granularity)
  1477. continue;
  1478. if (iter->state == D_DONE && !iter->ref) {
  1479. wait_for_completion_io(&iter->wait);
  1480. if (!iter->error)
  1481. trimmed += iter->di.len;
  1482. __remove_discard_cmd(sbi, iter);
  1483. } else {
  1484. iter->ref++;
  1485. dc = iter;
  1486. break;
  1487. }
  1488. }
  1489. mutex_unlock(&dcc->cmd_lock);
  1490. if (dc) {
  1491. trimmed += __wait_one_discard_bio(sbi, dc);
  1492. goto next;
  1493. }
  1494. return trimmed;
  1495. }
  1496. static unsigned int __wait_all_discard_cmd(struct f2fs_sb_info *sbi,
  1497. struct discard_policy *dpolicy)
  1498. {
  1499. struct discard_policy dp;
  1500. unsigned int discard_blks;
  1501. if (dpolicy)
  1502. return __wait_discard_cmd_range(sbi, dpolicy, 0, UINT_MAX);
  1503. /* wait all */
  1504. __init_discard_policy(sbi, &dp, DPOLICY_FSTRIM, MIN_DISCARD_GRANULARITY);
  1505. discard_blks = __wait_discard_cmd_range(sbi, &dp, 0, UINT_MAX);
  1506. __init_discard_policy(sbi, &dp, DPOLICY_UMOUNT, MIN_DISCARD_GRANULARITY);
  1507. discard_blks += __wait_discard_cmd_range(sbi, &dp, 0, UINT_MAX);
  1508. return discard_blks;
  1509. }
  1510. /* This should be covered by global mutex, &sit_i->sentry_lock */
  1511. static void f2fs_wait_discard_bio(struct f2fs_sb_info *sbi, block_t blkaddr)
  1512. {
  1513. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1514. struct discard_cmd *dc;
  1515. bool need_wait = false;
  1516. mutex_lock(&dcc->cmd_lock);
  1517. dc = __lookup_discard_cmd(sbi, blkaddr);
  1518. #ifdef CONFIG_BLK_DEV_ZONED
  1519. if (dc && f2fs_sb_has_blkzoned(sbi) && bdev_is_zoned(dc->bdev)) {
  1520. int devi = f2fs_bdev_index(sbi, dc->bdev);
  1521. if (devi < 0) {
  1522. mutex_unlock(&dcc->cmd_lock);
  1523. return;
  1524. }
  1525. if (f2fs_blkz_is_seq(sbi, devi, dc->di.start)) {
  1526. /* force submit zone reset */
  1527. if (dc->state == D_PREP)
  1528. __submit_zone_reset_cmd(sbi, dc, REQ_SYNC,
  1529. &dcc->wait_list, NULL);
  1530. dc->ref++;
  1531. mutex_unlock(&dcc->cmd_lock);
  1532. /* wait zone reset */
  1533. __wait_one_discard_bio(sbi, dc);
  1534. return;
  1535. }
  1536. }
  1537. #endif
  1538. if (dc) {
  1539. if (dc->state == D_PREP) {
  1540. __punch_discard_cmd(sbi, dc, blkaddr);
  1541. } else {
  1542. dc->ref++;
  1543. need_wait = true;
  1544. }
  1545. }
  1546. mutex_unlock(&dcc->cmd_lock);
  1547. if (need_wait)
  1548. __wait_one_discard_bio(sbi, dc);
  1549. }
  1550. void f2fs_stop_discard_thread(struct f2fs_sb_info *sbi)
  1551. {
  1552. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1553. if (dcc && dcc->f2fs_issue_discard) {
  1554. struct task_struct *discard_thread = dcc->f2fs_issue_discard;
  1555. dcc->f2fs_issue_discard = NULL;
  1556. kthread_stop(discard_thread);
  1557. }
  1558. }
  1559. /**
  1560. * f2fs_issue_discard_timeout() - Issue all discard cmd within UMOUNT_DISCARD_TIMEOUT
  1561. * @sbi: the f2fs_sb_info data for discard cmd to issue
  1562. *
  1563. * When UMOUNT_DISCARD_TIMEOUT is exceeded, all remaining discard commands will be dropped
  1564. *
  1565. * Return true if issued all discard cmd or no discard cmd need issue, otherwise return false.
  1566. */
  1567. bool f2fs_issue_discard_timeout(struct f2fs_sb_info *sbi)
  1568. {
  1569. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1570. struct discard_policy dpolicy;
  1571. bool dropped;
  1572. if (!atomic_read(&dcc->discard_cmd_cnt))
  1573. return true;
  1574. __init_discard_policy(sbi, &dpolicy, DPOLICY_UMOUNT,
  1575. dcc->discard_granularity);
  1576. __issue_discard_cmd(sbi, &dpolicy);
  1577. dropped = __drop_discard_cmd(sbi);
  1578. /* just to make sure there is no pending discard commands */
  1579. __wait_all_discard_cmd(sbi, NULL);
  1580. f2fs_bug_on(sbi, atomic_read(&dcc->discard_cmd_cnt));
  1581. return !dropped;
  1582. }
  1583. static int issue_discard_thread(void *data)
  1584. {
  1585. struct f2fs_sb_info *sbi = data;
  1586. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1587. wait_queue_head_t *q = &dcc->discard_wait_queue;
  1588. struct discard_policy dpolicy;
  1589. unsigned int wait_ms = dcc->min_discard_issue_time;
  1590. int issued;
  1591. set_freezable();
  1592. do {
  1593. wait_event_freezable_timeout(*q,
  1594. kthread_should_stop() || dcc->discard_wake,
  1595. msecs_to_jiffies(wait_ms));
  1596. if (sbi->gc_mode == GC_URGENT_HIGH ||
  1597. !f2fs_available_free_memory(sbi, DISCARD_CACHE))
  1598. __init_discard_policy(sbi, &dpolicy, DPOLICY_FORCE,
  1599. MIN_DISCARD_GRANULARITY);
  1600. else
  1601. __init_discard_policy(sbi, &dpolicy, DPOLICY_BG,
  1602. dcc->discard_granularity);
  1603. if (dcc->discard_wake)
  1604. dcc->discard_wake = false;
  1605. /* clean up pending candidates before going to sleep */
  1606. if (atomic_read(&dcc->queued_discard))
  1607. __wait_all_discard_cmd(sbi, NULL);
  1608. if (f2fs_readonly(sbi->sb))
  1609. continue;
  1610. if (kthread_should_stop())
  1611. return 0;
  1612. if (is_sbi_flag_set(sbi, SBI_NEED_FSCK) ||
  1613. !atomic_read(&dcc->discard_cmd_cnt)) {
  1614. wait_ms = dpolicy.max_interval;
  1615. continue;
  1616. }
  1617. sb_start_intwrite(sbi->sb);
  1618. issued = __issue_discard_cmd(sbi, &dpolicy);
  1619. if (issued > 0) {
  1620. __wait_all_discard_cmd(sbi, &dpolicy);
  1621. wait_ms = dpolicy.min_interval;
  1622. } else if (issued == -1) {
  1623. wait_ms = f2fs_time_to_wait(sbi, DISCARD_TIME);
  1624. if (!wait_ms)
  1625. wait_ms = dpolicy.mid_interval;
  1626. } else {
  1627. wait_ms = dpolicy.max_interval;
  1628. }
  1629. if (!atomic_read(&dcc->discard_cmd_cnt))
  1630. wait_ms = dpolicy.max_interval;
  1631. sb_end_intwrite(sbi->sb);
  1632. } while (!kthread_should_stop());
  1633. return 0;
  1634. }
  1635. #ifdef CONFIG_BLK_DEV_ZONED
  1636. static int __f2fs_issue_discard_zone(struct f2fs_sb_info *sbi,
  1637. struct block_device *bdev, block_t blkstart, block_t blklen)
  1638. {
  1639. sector_t sector, nr_sects;
  1640. block_t lblkstart = blkstart;
  1641. int devi = 0;
  1642. u64 remainder = 0;
  1643. if (f2fs_is_multi_device(sbi)) {
  1644. devi = f2fs_target_device_index(sbi, blkstart);
  1645. if (blkstart < FDEV(devi).start_blk ||
  1646. blkstart > FDEV(devi).end_blk) {
  1647. f2fs_err(sbi, "Invalid block %x", blkstart);
  1648. return -EIO;
  1649. }
  1650. blkstart -= FDEV(devi).start_blk;
  1651. }
  1652. /* For sequential zones, reset the zone write pointer */
  1653. if (f2fs_blkz_is_seq(sbi, devi, blkstart)) {
  1654. sector = SECTOR_FROM_BLOCK(blkstart);
  1655. nr_sects = SECTOR_FROM_BLOCK(blklen);
  1656. div64_u64_rem(sector, bdev_zone_sectors(bdev), &remainder);
  1657. if (remainder || nr_sects != bdev_zone_sectors(bdev)) {
  1658. f2fs_err(sbi, "(%d) %s: Unaligned zone reset attempted (block %x + %x)",
  1659. devi, sbi->s_ndevs ? FDEV(devi).path : "",
  1660. blkstart, blklen);
  1661. return -EIO;
  1662. }
  1663. if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) {
  1664. unsigned int nofs_flags;
  1665. int ret;
  1666. trace_f2fs_issue_reset_zone(bdev, blkstart);
  1667. nofs_flags = memalloc_nofs_save();
  1668. ret = blkdev_zone_mgmt(bdev, REQ_OP_ZONE_RESET,
  1669. sector, nr_sects);
  1670. memalloc_nofs_restore(nofs_flags);
  1671. return ret;
  1672. }
  1673. __queue_zone_reset_cmd(sbi, bdev, blkstart, lblkstart, blklen);
  1674. return 0;
  1675. }
  1676. /* For conventional zones, use regular discard if supported */
  1677. __queue_discard_cmd(sbi, bdev, lblkstart, blklen);
  1678. return 0;
  1679. }
  1680. #endif
  1681. static int __issue_discard_async(struct f2fs_sb_info *sbi,
  1682. struct block_device *bdev, block_t blkstart, block_t blklen)
  1683. {
  1684. #ifdef CONFIG_BLK_DEV_ZONED
  1685. if (f2fs_sb_has_blkzoned(sbi) && bdev_is_zoned(bdev))
  1686. return __f2fs_issue_discard_zone(sbi, bdev, blkstart, blklen);
  1687. #endif
  1688. __queue_discard_cmd(sbi, bdev, blkstart, blklen);
  1689. return 0;
  1690. }
  1691. static int f2fs_issue_discard(struct f2fs_sb_info *sbi,
  1692. block_t blkstart, block_t blklen)
  1693. {
  1694. sector_t start = blkstart, len = 0;
  1695. struct block_device *bdev;
  1696. struct seg_entry *se;
  1697. unsigned int offset;
  1698. block_t i;
  1699. int err = 0;
  1700. bdev = f2fs_target_device(sbi, blkstart, NULL);
  1701. for (i = blkstart; i < blkstart + blklen; i++, len++) {
  1702. if (i != start) {
  1703. struct block_device *bdev2 =
  1704. f2fs_target_device(sbi, i, NULL);
  1705. if (bdev2 != bdev) {
  1706. err = __issue_discard_async(sbi, bdev,
  1707. start, len);
  1708. if (err)
  1709. return err;
  1710. bdev = bdev2;
  1711. start = i;
  1712. len = 0;
  1713. }
  1714. }
  1715. se = get_seg_entry(sbi, GET_SEGNO(sbi, i));
  1716. offset = GET_BLKOFF_FROM_SEG0(sbi, i);
  1717. if (f2fs_block_unit_discard(sbi) &&
  1718. !f2fs_test_and_set_bit(offset, se->discard_map))
  1719. sbi->discard_blks--;
  1720. }
  1721. if (len)
  1722. err = __issue_discard_async(sbi, bdev, start, len);
  1723. return err;
  1724. }
  1725. static bool add_discard_addrs(struct f2fs_sb_info *sbi, struct cp_control *cpc,
  1726. bool check_only)
  1727. {
  1728. int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long);
  1729. struct seg_entry *se = get_seg_entry(sbi, cpc->trim_start);
  1730. unsigned long *cur_map = (unsigned long *)se->cur_valid_map;
  1731. unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map;
  1732. unsigned long *discard_map = (unsigned long *)se->discard_map;
  1733. unsigned long *dmap = SIT_I(sbi)->tmp_map;
  1734. unsigned int start = 0, end = -1;
  1735. bool force = (cpc->reason & CP_DISCARD);
  1736. struct discard_entry *de = NULL;
  1737. struct list_head *head = &SM_I(sbi)->dcc_info->entry_list;
  1738. int i;
  1739. if (se->valid_blocks == BLKS_PER_SEG(sbi) ||
  1740. !f2fs_hw_support_discard(sbi) ||
  1741. !f2fs_block_unit_discard(sbi))
  1742. return false;
  1743. if (!force) {
  1744. if (!f2fs_realtime_discard_enable(sbi) || !se->valid_blocks ||
  1745. SM_I(sbi)->dcc_info->nr_discards >=
  1746. SM_I(sbi)->dcc_info->max_discards)
  1747. return false;
  1748. }
  1749. /* SIT_VBLOCK_MAP_SIZE should be multiple of sizeof(unsigned long) */
  1750. for (i = 0; i < entries; i++)
  1751. dmap[i] = force ? ~ckpt_map[i] & ~discard_map[i] :
  1752. (cur_map[i] ^ ckpt_map[i]) & ckpt_map[i];
  1753. while (force || SM_I(sbi)->dcc_info->nr_discards <=
  1754. SM_I(sbi)->dcc_info->max_discards) {
  1755. start = __find_rev_next_bit(dmap, BLKS_PER_SEG(sbi), end + 1);
  1756. if (start >= BLKS_PER_SEG(sbi))
  1757. break;
  1758. end = __find_rev_next_zero_bit(dmap,
  1759. BLKS_PER_SEG(sbi), start + 1);
  1760. if (force && start && end != BLKS_PER_SEG(sbi) &&
  1761. (end - start) < cpc->trim_minlen)
  1762. continue;
  1763. if (check_only)
  1764. return true;
  1765. if (!de) {
  1766. de = f2fs_kmem_cache_alloc(discard_entry_slab,
  1767. GFP_F2FS_ZERO, true, NULL);
  1768. de->start_blkaddr = START_BLOCK(sbi, cpc->trim_start);
  1769. list_add_tail(&de->list, head);
  1770. }
  1771. for (i = start; i < end; i++)
  1772. __set_bit_le(i, (void *)de->discard_map);
  1773. SM_I(sbi)->dcc_info->nr_discards += end - start;
  1774. }
  1775. return false;
  1776. }
  1777. static void release_discard_addr(struct discard_entry *entry)
  1778. {
  1779. list_del(&entry->list);
  1780. kmem_cache_free(discard_entry_slab, entry);
  1781. }
  1782. void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi)
  1783. {
  1784. struct list_head *head = &(SM_I(sbi)->dcc_info->entry_list);
  1785. struct discard_entry *entry, *this;
  1786. /* drop caches */
  1787. list_for_each_entry_safe(entry, this, head, list)
  1788. release_discard_addr(entry);
  1789. }
  1790. /*
  1791. * Should call f2fs_clear_prefree_segments after checkpoint is done.
  1792. */
  1793. static void set_prefree_as_free_segments(struct f2fs_sb_info *sbi)
  1794. {
  1795. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  1796. unsigned int segno;
  1797. mutex_lock(&dirty_i->seglist_lock);
  1798. for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], MAIN_SEGS(sbi))
  1799. __set_test_and_free(sbi, segno, false);
  1800. mutex_unlock(&dirty_i->seglist_lock);
  1801. }
  1802. void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
  1803. struct cp_control *cpc)
  1804. {
  1805. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1806. struct list_head *head = &dcc->entry_list;
  1807. struct discard_entry *entry, *this;
  1808. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  1809. unsigned long *prefree_map = dirty_i->dirty_segmap[PRE];
  1810. unsigned int start = 0, end = -1;
  1811. unsigned int secno, start_segno;
  1812. bool force = (cpc->reason & CP_DISCARD);
  1813. bool section_alignment = F2FS_OPTION(sbi).discard_unit ==
  1814. DISCARD_UNIT_SECTION;
  1815. if (f2fs_lfs_mode(sbi) && __is_large_section(sbi))
  1816. section_alignment = true;
  1817. mutex_lock(&dirty_i->seglist_lock);
  1818. while (1) {
  1819. int i;
  1820. if (section_alignment && end != -1)
  1821. end--;
  1822. start = find_next_bit(prefree_map, MAIN_SEGS(sbi), end + 1);
  1823. if (start >= MAIN_SEGS(sbi))
  1824. break;
  1825. end = find_next_zero_bit(prefree_map, MAIN_SEGS(sbi),
  1826. start + 1);
  1827. if (section_alignment) {
  1828. start = rounddown(start, SEGS_PER_SEC(sbi));
  1829. end = roundup(end, SEGS_PER_SEC(sbi));
  1830. }
  1831. for (i = start; i < end; i++) {
  1832. if (test_and_clear_bit(i, prefree_map))
  1833. dirty_i->nr_dirty[PRE]--;
  1834. }
  1835. if (!f2fs_realtime_discard_enable(sbi))
  1836. continue;
  1837. if (force && start >= cpc->trim_start &&
  1838. (end - 1) <= cpc->trim_end)
  1839. continue;
  1840. /* Should cover 2MB zoned device for zone-based reset */
  1841. if (!f2fs_sb_has_blkzoned(sbi) &&
  1842. (!f2fs_lfs_mode(sbi) || !__is_large_section(sbi))) {
  1843. f2fs_issue_discard(sbi, START_BLOCK(sbi, start),
  1844. SEGS_TO_BLKS(sbi, end - start));
  1845. continue;
  1846. }
  1847. next:
  1848. secno = GET_SEC_FROM_SEG(sbi, start);
  1849. start_segno = GET_SEG_FROM_SEC(sbi, secno);
  1850. if (!IS_CURSEC(sbi, secno) &&
  1851. !get_valid_blocks(sbi, start, true))
  1852. f2fs_issue_discard(sbi, START_BLOCK(sbi, start_segno),
  1853. BLKS_PER_SEC(sbi));
  1854. start = start_segno + SEGS_PER_SEC(sbi);
  1855. if (start < end)
  1856. goto next;
  1857. else
  1858. end = start - 1;
  1859. }
  1860. mutex_unlock(&dirty_i->seglist_lock);
  1861. if (!f2fs_block_unit_discard(sbi))
  1862. goto wakeup;
  1863. /* send small discards */
  1864. list_for_each_entry_safe(entry, this, head, list) {
  1865. unsigned int cur_pos = 0, next_pos, len, total_len = 0;
  1866. bool is_valid = test_bit_le(0, entry->discard_map);
  1867. find_next:
  1868. if (is_valid) {
  1869. next_pos = find_next_zero_bit_le(entry->discard_map,
  1870. BLKS_PER_SEG(sbi), cur_pos);
  1871. len = next_pos - cur_pos;
  1872. if (f2fs_sb_has_blkzoned(sbi) ||
  1873. (force && len < cpc->trim_minlen))
  1874. goto skip;
  1875. f2fs_issue_discard(sbi, entry->start_blkaddr + cur_pos,
  1876. len);
  1877. total_len += len;
  1878. } else {
  1879. next_pos = find_next_bit_le(entry->discard_map,
  1880. BLKS_PER_SEG(sbi), cur_pos);
  1881. }
  1882. skip:
  1883. cur_pos = next_pos;
  1884. is_valid = !is_valid;
  1885. if (cur_pos < BLKS_PER_SEG(sbi))
  1886. goto find_next;
  1887. release_discard_addr(entry);
  1888. dcc->nr_discards -= total_len;
  1889. }
  1890. wakeup:
  1891. wake_up_discard_thread(sbi, false);
  1892. }
  1893. int f2fs_start_discard_thread(struct f2fs_sb_info *sbi)
  1894. {
  1895. dev_t dev = sbi->sb->s_bdev->bd_dev;
  1896. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1897. int err = 0;
  1898. if (f2fs_sb_has_readonly(sbi)) {
  1899. f2fs_info(sbi,
  1900. "Skip to start discard thread for readonly image");
  1901. return 0;
  1902. }
  1903. if (!f2fs_realtime_discard_enable(sbi))
  1904. return 0;
  1905. dcc->f2fs_issue_discard = kthread_run(issue_discard_thread, sbi,
  1906. "f2fs_discard-%u:%u", MAJOR(dev), MINOR(dev));
  1907. if (IS_ERR(dcc->f2fs_issue_discard)) {
  1908. err = PTR_ERR(dcc->f2fs_issue_discard);
  1909. dcc->f2fs_issue_discard = NULL;
  1910. }
  1911. return err;
  1912. }
  1913. static int create_discard_cmd_control(struct f2fs_sb_info *sbi)
  1914. {
  1915. struct discard_cmd_control *dcc;
  1916. int err = 0, i;
  1917. if (SM_I(sbi)->dcc_info) {
  1918. dcc = SM_I(sbi)->dcc_info;
  1919. goto init_thread;
  1920. }
  1921. dcc = f2fs_kzalloc(sbi, sizeof(struct discard_cmd_control), GFP_KERNEL);
  1922. if (!dcc)
  1923. return -ENOMEM;
  1924. dcc->discard_io_aware_gran = MAX_PLIST_NUM;
  1925. dcc->discard_granularity = DEFAULT_DISCARD_GRANULARITY;
  1926. dcc->max_ordered_discard = DEFAULT_MAX_ORDERED_DISCARD_GRANULARITY;
  1927. dcc->discard_io_aware = DPOLICY_IO_AWARE_ENABLE;
  1928. if (F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_SEGMENT)
  1929. dcc->discard_granularity = BLKS_PER_SEG(sbi);
  1930. else if (F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_SECTION)
  1931. dcc->discard_granularity = BLKS_PER_SEC(sbi);
  1932. INIT_LIST_HEAD(&dcc->entry_list);
  1933. for (i = 0; i < MAX_PLIST_NUM; i++)
  1934. INIT_LIST_HEAD(&dcc->pend_list[i]);
  1935. INIT_LIST_HEAD(&dcc->wait_list);
  1936. INIT_LIST_HEAD(&dcc->fstrim_list);
  1937. mutex_init(&dcc->cmd_lock);
  1938. atomic_set(&dcc->issued_discard, 0);
  1939. atomic_set(&dcc->queued_discard, 0);
  1940. atomic_set(&dcc->discard_cmd_cnt, 0);
  1941. dcc->nr_discards = 0;
  1942. dcc->max_discards = SEGS_TO_BLKS(sbi, MAIN_SEGS(sbi));
  1943. dcc->max_discard_request = DEF_MAX_DISCARD_REQUEST;
  1944. dcc->min_discard_issue_time = DEF_MIN_DISCARD_ISSUE_TIME;
  1945. dcc->mid_discard_issue_time = DEF_MID_DISCARD_ISSUE_TIME;
  1946. dcc->max_discard_issue_time = DEF_MAX_DISCARD_ISSUE_TIME;
  1947. dcc->discard_urgent_util = DEF_DISCARD_URGENT_UTIL;
  1948. dcc->undiscard_blks = 0;
  1949. dcc->next_pos = 0;
  1950. dcc->root = RB_ROOT_CACHED;
  1951. dcc->rbtree_check = false;
  1952. init_waitqueue_head(&dcc->discard_wait_queue);
  1953. SM_I(sbi)->dcc_info = dcc;
  1954. init_thread:
  1955. err = f2fs_start_discard_thread(sbi);
  1956. if (err) {
  1957. kfree(dcc);
  1958. SM_I(sbi)->dcc_info = NULL;
  1959. }
  1960. return err;
  1961. }
  1962. static void destroy_discard_cmd_control(struct f2fs_sb_info *sbi)
  1963. {
  1964. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  1965. if (!dcc)
  1966. return;
  1967. f2fs_stop_discard_thread(sbi);
  1968. /*
  1969. * Recovery can cache discard commands, so in error path of
  1970. * fill_super(), it needs to give a chance to handle them.
  1971. */
  1972. f2fs_issue_discard_timeout(sbi);
  1973. kfree(dcc);
  1974. SM_I(sbi)->dcc_info = NULL;
  1975. }
  1976. static bool __mark_sit_entry_dirty(struct f2fs_sb_info *sbi, unsigned int segno)
  1977. {
  1978. struct sit_info *sit_i = SIT_I(sbi);
  1979. if (!__test_and_set_bit(segno, sit_i->dirty_sentries_bitmap)) {
  1980. sit_i->dirty_sentries++;
  1981. return false;
  1982. }
  1983. return true;
  1984. }
  1985. static void __set_sit_entry_type(struct f2fs_sb_info *sbi, int type,
  1986. unsigned int segno, int modified)
  1987. {
  1988. struct seg_entry *se = get_seg_entry(sbi, segno);
  1989. se->type = type;
  1990. if (modified)
  1991. __mark_sit_entry_dirty(sbi, segno);
  1992. }
  1993. static inline unsigned long long get_segment_mtime(struct f2fs_sb_info *sbi,
  1994. block_t blkaddr)
  1995. {
  1996. unsigned int segno = GET_SEGNO(sbi, blkaddr);
  1997. if (segno == NULL_SEGNO)
  1998. return 0;
  1999. return get_seg_entry(sbi, segno)->mtime;
  2000. }
  2001. static void update_segment_mtime(struct f2fs_sb_info *sbi, block_t blkaddr,
  2002. unsigned long long old_mtime)
  2003. {
  2004. struct seg_entry *se;
  2005. unsigned int segno = GET_SEGNO(sbi, blkaddr);
  2006. unsigned long long ctime = get_mtime(sbi, false);
  2007. unsigned long long mtime = old_mtime ? old_mtime : ctime;
  2008. if (segno == NULL_SEGNO)
  2009. return;
  2010. se = get_seg_entry(sbi, segno);
  2011. if (!se->mtime)
  2012. se->mtime = mtime;
  2013. else
  2014. se->mtime = div_u64(se->mtime * se->valid_blocks + mtime,
  2015. se->valid_blocks + 1);
  2016. if (ctime > SIT_I(sbi)->max_mtime)
  2017. SIT_I(sbi)->max_mtime = ctime;
  2018. }
  2019. static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del)
  2020. {
  2021. struct seg_entry *se;
  2022. unsigned int segno, offset;
  2023. long int new_vblocks;
  2024. bool exist;
  2025. #ifdef CONFIG_F2FS_CHECK_FS
  2026. bool mir_exist;
  2027. #endif
  2028. segno = GET_SEGNO(sbi, blkaddr);
  2029. if (segno == NULL_SEGNO)
  2030. return;
  2031. se = get_seg_entry(sbi, segno);
  2032. new_vblocks = se->valid_blocks + del;
  2033. offset = GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
  2034. f2fs_bug_on(sbi, (new_vblocks < 0 ||
  2035. (new_vblocks > f2fs_usable_blks_in_seg(sbi, segno))));
  2036. se->valid_blocks = new_vblocks;
  2037. /* Update valid block bitmap */
  2038. if (del > 0) {
  2039. exist = f2fs_test_and_set_bit(offset, se->cur_valid_map);
  2040. #ifdef CONFIG_F2FS_CHECK_FS
  2041. mir_exist = f2fs_test_and_set_bit(offset,
  2042. se->cur_valid_map_mir);
  2043. if (unlikely(exist != mir_exist)) {
  2044. f2fs_err(sbi, "Inconsistent error when setting bitmap, blk:%u, old bit:%d",
  2045. blkaddr, exist);
  2046. f2fs_bug_on(sbi, 1);
  2047. }
  2048. #endif
  2049. if (unlikely(exist)) {
  2050. f2fs_err(sbi, "Bitmap was wrongly set, blk:%u",
  2051. blkaddr);
  2052. f2fs_bug_on(sbi, 1);
  2053. se->valid_blocks--;
  2054. del = 0;
  2055. }
  2056. if (f2fs_block_unit_discard(sbi) &&
  2057. !f2fs_test_and_set_bit(offset, se->discard_map))
  2058. sbi->discard_blks--;
  2059. /*
  2060. * SSR should never reuse block which is checkpointed
  2061. * or newly invalidated.
  2062. */
  2063. if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED)) {
  2064. if (!f2fs_test_and_set_bit(offset, se->ckpt_valid_map))
  2065. se->ckpt_valid_blocks++;
  2066. }
  2067. } else {
  2068. exist = f2fs_test_and_clear_bit(offset, se->cur_valid_map);
  2069. #ifdef CONFIG_F2FS_CHECK_FS
  2070. mir_exist = f2fs_test_and_clear_bit(offset,
  2071. se->cur_valid_map_mir);
  2072. if (unlikely(exist != mir_exist)) {
  2073. f2fs_err(sbi, "Inconsistent error when clearing bitmap, blk:%u, old bit:%d",
  2074. blkaddr, exist);
  2075. f2fs_bug_on(sbi, 1);
  2076. }
  2077. #endif
  2078. if (unlikely(!exist)) {
  2079. f2fs_err(sbi, "Bitmap was wrongly cleared, blk:%u",
  2080. blkaddr);
  2081. f2fs_bug_on(sbi, 1);
  2082. se->valid_blocks++;
  2083. del = 0;
  2084. } else if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
  2085. /*
  2086. * If checkpoints are off, we must not reuse data that
  2087. * was used in the previous checkpoint. If it was used
  2088. * before, we must track that to know how much space we
  2089. * really have.
  2090. */
  2091. if (f2fs_test_bit(offset, se->ckpt_valid_map)) {
  2092. spin_lock(&sbi->stat_lock);
  2093. sbi->unusable_block_count++;
  2094. spin_unlock(&sbi->stat_lock);
  2095. }
  2096. }
  2097. if (f2fs_block_unit_discard(sbi) &&
  2098. f2fs_test_and_clear_bit(offset, se->discard_map))
  2099. sbi->discard_blks++;
  2100. }
  2101. if (!f2fs_test_bit(offset, se->ckpt_valid_map))
  2102. se->ckpt_valid_blocks += del;
  2103. __mark_sit_entry_dirty(sbi, segno);
  2104. /* update total number of valid blocks to be written in ckpt area */
  2105. SIT_I(sbi)->written_valid_blocks += del;
  2106. if (__is_large_section(sbi))
  2107. get_sec_entry(sbi, segno)->valid_blocks += del;
  2108. }
  2109. void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr)
  2110. {
  2111. unsigned int segno = GET_SEGNO(sbi, addr);
  2112. struct sit_info *sit_i = SIT_I(sbi);
  2113. f2fs_bug_on(sbi, addr == NULL_ADDR);
  2114. if (addr == NEW_ADDR || addr == COMPRESS_ADDR)
  2115. return;
  2116. f2fs_invalidate_internal_cache(sbi, addr);
  2117. /* add it into sit main buffer */
  2118. down_write(&sit_i->sentry_lock);
  2119. update_segment_mtime(sbi, addr, 0);
  2120. update_sit_entry(sbi, addr, -1);
  2121. /* add it into dirty seglist */
  2122. locate_dirty_segment(sbi, segno);
  2123. up_write(&sit_i->sentry_lock);
  2124. }
  2125. bool f2fs_is_checkpointed_data(struct f2fs_sb_info *sbi, block_t blkaddr)
  2126. {
  2127. struct sit_info *sit_i = SIT_I(sbi);
  2128. unsigned int segno, offset;
  2129. struct seg_entry *se;
  2130. bool is_cp = false;
  2131. if (!__is_valid_data_blkaddr(blkaddr))
  2132. return true;
  2133. down_read(&sit_i->sentry_lock);
  2134. segno = GET_SEGNO(sbi, blkaddr);
  2135. se = get_seg_entry(sbi, segno);
  2136. offset = GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
  2137. if (f2fs_test_bit(offset, se->ckpt_valid_map))
  2138. is_cp = true;
  2139. up_read(&sit_i->sentry_lock);
  2140. return is_cp;
  2141. }
  2142. static unsigned short f2fs_curseg_valid_blocks(struct f2fs_sb_info *sbi, int type)
  2143. {
  2144. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2145. if (sbi->ckpt->alloc_type[type] == SSR)
  2146. return BLKS_PER_SEG(sbi);
  2147. return curseg->next_blkoff;
  2148. }
  2149. /*
  2150. * Calculate the number of current summary pages for writing
  2151. */
  2152. int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra)
  2153. {
  2154. int valid_sum_count = 0;
  2155. int i, sum_in_page;
  2156. for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
  2157. if (sbi->ckpt->alloc_type[i] != SSR && for_ra)
  2158. valid_sum_count +=
  2159. le16_to_cpu(F2FS_CKPT(sbi)->cur_data_blkoff[i]);
  2160. else
  2161. valid_sum_count += f2fs_curseg_valid_blocks(sbi, i);
  2162. }
  2163. sum_in_page = (PAGE_SIZE - 2 * SUM_JOURNAL_SIZE -
  2164. SUM_FOOTER_SIZE) / SUMMARY_SIZE;
  2165. if (valid_sum_count <= sum_in_page)
  2166. return 1;
  2167. else if ((valid_sum_count - sum_in_page) <=
  2168. (PAGE_SIZE - SUM_FOOTER_SIZE) / SUMMARY_SIZE)
  2169. return 2;
  2170. return 3;
  2171. }
  2172. /*
  2173. * Caller should put this summary page
  2174. */
  2175. struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno)
  2176. {
  2177. if (unlikely(f2fs_cp_error(sbi)))
  2178. return ERR_PTR(-EIO);
  2179. return f2fs_get_meta_page_retry(sbi, GET_SUM_BLOCK(sbi, segno));
  2180. }
  2181. void f2fs_update_meta_page(struct f2fs_sb_info *sbi,
  2182. void *src, block_t blk_addr)
  2183. {
  2184. struct page *page = f2fs_grab_meta_page(sbi, blk_addr);
  2185. memcpy(page_address(page), src, PAGE_SIZE);
  2186. set_page_dirty(page);
  2187. f2fs_put_page(page, 1);
  2188. }
  2189. static void write_sum_page(struct f2fs_sb_info *sbi,
  2190. struct f2fs_summary_block *sum_blk, block_t blk_addr)
  2191. {
  2192. f2fs_update_meta_page(sbi, (void *)sum_blk, blk_addr);
  2193. }
  2194. static void write_current_sum_page(struct f2fs_sb_info *sbi,
  2195. int type, block_t blk_addr)
  2196. {
  2197. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2198. struct page *page = f2fs_grab_meta_page(sbi, blk_addr);
  2199. struct f2fs_summary_block *src = curseg->sum_blk;
  2200. struct f2fs_summary_block *dst;
  2201. dst = (struct f2fs_summary_block *)page_address(page);
  2202. memset(dst, 0, PAGE_SIZE);
  2203. mutex_lock(&curseg->curseg_mutex);
  2204. down_read(&curseg->journal_rwsem);
  2205. memcpy(&dst->journal, curseg->journal, SUM_JOURNAL_SIZE);
  2206. up_read(&curseg->journal_rwsem);
  2207. memcpy(dst->entries, src->entries, SUM_ENTRY_SIZE);
  2208. memcpy(&dst->footer, &src->footer, SUM_FOOTER_SIZE);
  2209. mutex_unlock(&curseg->curseg_mutex);
  2210. set_page_dirty(page);
  2211. f2fs_put_page(page, 1);
  2212. }
  2213. static int is_next_segment_free(struct f2fs_sb_info *sbi,
  2214. struct curseg_info *curseg)
  2215. {
  2216. unsigned int segno = curseg->segno + 1;
  2217. struct free_segmap_info *free_i = FREE_I(sbi);
  2218. if (segno < MAIN_SEGS(sbi) && segno % SEGS_PER_SEC(sbi))
  2219. return !test_bit(segno, free_i->free_segmap);
  2220. return 0;
  2221. }
  2222. /*
  2223. * Find a new segment from the free segments bitmap to right order
  2224. * This function should be returned with success, otherwise BUG
  2225. */
  2226. static int get_new_segment(struct f2fs_sb_info *sbi,
  2227. unsigned int *newseg, bool new_sec, bool pinning)
  2228. {
  2229. struct free_segmap_info *free_i = FREE_I(sbi);
  2230. unsigned int segno, secno, zoneno;
  2231. unsigned int total_zones = MAIN_SECS(sbi) / sbi->secs_per_zone;
  2232. unsigned int hint = GET_SEC_FROM_SEG(sbi, *newseg);
  2233. unsigned int old_zoneno = GET_ZONE_FROM_SEG(sbi, *newseg);
  2234. bool init = true;
  2235. int i;
  2236. int ret = 0;
  2237. spin_lock(&free_i->segmap_lock);
  2238. if (time_to_inject(sbi, FAULT_NO_SEGMENT)) {
  2239. ret = -ENOSPC;
  2240. goto out_unlock;
  2241. }
  2242. if (!new_sec && ((*newseg + 1) % SEGS_PER_SEC(sbi))) {
  2243. segno = find_next_zero_bit(free_i->free_segmap,
  2244. GET_SEG_FROM_SEC(sbi, hint + 1), *newseg + 1);
  2245. if (segno < GET_SEG_FROM_SEC(sbi, hint + 1))
  2246. goto got_it;
  2247. }
  2248. #ifdef CONFIG_BLK_DEV_ZONED
  2249. /*
  2250. * If we format f2fs on zoned storage, let's try to get pinned sections
  2251. * from beginning of the storage, which should be a conventional one.
  2252. */
  2253. if (f2fs_sb_has_blkzoned(sbi)) {
  2254. /* Prioritize writing to conventional zones */
  2255. if (sbi->blkzone_alloc_policy == BLKZONE_ALLOC_PRIOR_CONV || pinning)
  2256. segno = 0;
  2257. else
  2258. segno = max(first_zoned_segno(sbi), *newseg);
  2259. hint = GET_SEC_FROM_SEG(sbi, segno);
  2260. }
  2261. #endif
  2262. find_other_zone:
  2263. secno = find_next_zero_bit(free_i->free_secmap, MAIN_SECS(sbi), hint);
  2264. #ifdef CONFIG_BLK_DEV_ZONED
  2265. if (secno >= MAIN_SECS(sbi) && f2fs_sb_has_blkzoned(sbi)) {
  2266. /* Write only to sequential zones */
  2267. if (sbi->blkzone_alloc_policy == BLKZONE_ALLOC_ONLY_SEQ) {
  2268. hint = GET_SEC_FROM_SEG(sbi, first_zoned_segno(sbi));
  2269. secno = find_next_zero_bit(free_i->free_secmap, MAIN_SECS(sbi), hint);
  2270. } else
  2271. secno = find_first_zero_bit(free_i->free_secmap,
  2272. MAIN_SECS(sbi));
  2273. if (secno >= MAIN_SECS(sbi)) {
  2274. ret = -ENOSPC;
  2275. f2fs_bug_on(sbi, 1);
  2276. goto out_unlock;
  2277. }
  2278. }
  2279. #endif
  2280. if (secno >= MAIN_SECS(sbi)) {
  2281. secno = find_first_zero_bit(free_i->free_secmap,
  2282. MAIN_SECS(sbi));
  2283. if (secno >= MAIN_SECS(sbi)) {
  2284. ret = -ENOSPC;
  2285. f2fs_bug_on(sbi, 1);
  2286. goto out_unlock;
  2287. }
  2288. }
  2289. segno = GET_SEG_FROM_SEC(sbi, secno);
  2290. zoneno = GET_ZONE_FROM_SEC(sbi, secno);
  2291. /* give up on finding another zone */
  2292. if (!init)
  2293. goto got_it;
  2294. if (sbi->secs_per_zone == 1)
  2295. goto got_it;
  2296. if (zoneno == old_zoneno)
  2297. goto got_it;
  2298. for (i = 0; i < NR_CURSEG_TYPE; i++)
  2299. if (CURSEG_I(sbi, i)->zone == zoneno)
  2300. break;
  2301. if (i < NR_CURSEG_TYPE) {
  2302. /* zone is in user, try another */
  2303. if (zoneno + 1 >= total_zones)
  2304. hint = 0;
  2305. else
  2306. hint = (zoneno + 1) * sbi->secs_per_zone;
  2307. init = false;
  2308. goto find_other_zone;
  2309. }
  2310. got_it:
  2311. /* set it as dirty segment in free segmap */
  2312. f2fs_bug_on(sbi, test_bit(segno, free_i->free_segmap));
  2313. /* no free section in conventional zone */
  2314. if (new_sec && pinning &&
  2315. !f2fs_valid_pinned_area(sbi, START_BLOCK(sbi, segno))) {
  2316. ret = -EAGAIN;
  2317. goto out_unlock;
  2318. }
  2319. __set_inuse(sbi, segno);
  2320. *newseg = segno;
  2321. out_unlock:
  2322. spin_unlock(&free_i->segmap_lock);
  2323. if (ret == -ENOSPC)
  2324. f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_NO_SEGMENT);
  2325. return ret;
  2326. }
  2327. static void reset_curseg(struct f2fs_sb_info *sbi, int type, int modified)
  2328. {
  2329. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2330. struct summary_footer *sum_footer;
  2331. unsigned short seg_type = curseg->seg_type;
  2332. /* only happen when get_new_segment() fails */
  2333. if (curseg->next_segno == NULL_SEGNO)
  2334. return;
  2335. curseg->inited = true;
  2336. curseg->segno = curseg->next_segno;
  2337. curseg->zone = GET_ZONE_FROM_SEG(sbi, curseg->segno);
  2338. curseg->next_blkoff = 0;
  2339. curseg->next_segno = NULL_SEGNO;
  2340. sum_footer = &(curseg->sum_blk->footer);
  2341. memset(sum_footer, 0, sizeof(struct summary_footer));
  2342. sanity_check_seg_type(sbi, seg_type);
  2343. if (IS_DATASEG(seg_type))
  2344. SET_SUM_TYPE(sum_footer, SUM_TYPE_DATA);
  2345. if (IS_NODESEG(seg_type))
  2346. SET_SUM_TYPE(sum_footer, SUM_TYPE_NODE);
  2347. __set_sit_entry_type(sbi, seg_type, curseg->segno, modified);
  2348. }
  2349. static unsigned int __get_next_segno(struct f2fs_sb_info *sbi, int type)
  2350. {
  2351. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2352. unsigned short seg_type = curseg->seg_type;
  2353. sanity_check_seg_type(sbi, seg_type);
  2354. if (__is_large_section(sbi)) {
  2355. if (f2fs_need_rand_seg(sbi)) {
  2356. unsigned int hint = GET_SEC_FROM_SEG(sbi, curseg->segno);
  2357. if (GET_SEC_FROM_SEG(sbi, curseg->segno + 1) != hint)
  2358. return curseg->segno;
  2359. return get_random_u32_inclusive(curseg->segno + 1,
  2360. GET_SEG_FROM_SEC(sbi, hint + 1) - 1);
  2361. }
  2362. return curseg->segno;
  2363. } else if (f2fs_need_rand_seg(sbi)) {
  2364. return get_random_u32_below(MAIN_SECS(sbi) * SEGS_PER_SEC(sbi));
  2365. }
  2366. /* inmem log may not locate on any segment after mount */
  2367. if (!curseg->inited)
  2368. return 0;
  2369. if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
  2370. return 0;
  2371. if (seg_type == CURSEG_HOT_DATA || IS_NODESEG(seg_type))
  2372. return 0;
  2373. if (SIT_I(sbi)->last_victim[ALLOC_NEXT])
  2374. return SIT_I(sbi)->last_victim[ALLOC_NEXT];
  2375. /* find segments from 0 to reuse freed segments */
  2376. if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_REUSE)
  2377. return 0;
  2378. return curseg->segno;
  2379. }
  2380. /*
  2381. * Allocate a current working segment.
  2382. * This function always allocates a free segment in LFS manner.
  2383. */
  2384. static int new_curseg(struct f2fs_sb_info *sbi, int type, bool new_sec)
  2385. {
  2386. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2387. unsigned int segno = curseg->segno;
  2388. bool pinning = type == CURSEG_COLD_DATA_PINNED;
  2389. int ret;
  2390. if (curseg->inited)
  2391. write_sum_page(sbi, curseg->sum_blk, GET_SUM_BLOCK(sbi, segno));
  2392. segno = __get_next_segno(sbi, type);
  2393. ret = get_new_segment(sbi, &segno, new_sec, pinning);
  2394. if (ret) {
  2395. if (ret == -ENOSPC)
  2396. curseg->segno = NULL_SEGNO;
  2397. return ret;
  2398. }
  2399. curseg->next_segno = segno;
  2400. reset_curseg(sbi, type, 1);
  2401. curseg->alloc_type = LFS;
  2402. if (F2FS_OPTION(sbi).fs_mode == FS_MODE_FRAGMENT_BLK)
  2403. curseg->fragment_remained_chunk =
  2404. get_random_u32_inclusive(1, sbi->max_fragment_chunk);
  2405. return 0;
  2406. }
  2407. static int __next_free_blkoff(struct f2fs_sb_info *sbi,
  2408. int segno, block_t start)
  2409. {
  2410. struct seg_entry *se = get_seg_entry(sbi, segno);
  2411. int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long);
  2412. unsigned long *target_map = SIT_I(sbi)->tmp_map;
  2413. unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map;
  2414. unsigned long *cur_map = (unsigned long *)se->cur_valid_map;
  2415. int i;
  2416. for (i = 0; i < entries; i++)
  2417. target_map[i] = ckpt_map[i] | cur_map[i];
  2418. return __find_rev_next_zero_bit(target_map, BLKS_PER_SEG(sbi), start);
  2419. }
  2420. static int f2fs_find_next_ssr_block(struct f2fs_sb_info *sbi,
  2421. struct curseg_info *seg)
  2422. {
  2423. return __next_free_blkoff(sbi, seg->segno, seg->next_blkoff + 1);
  2424. }
  2425. bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno)
  2426. {
  2427. return __next_free_blkoff(sbi, segno, 0) < BLKS_PER_SEG(sbi);
  2428. }
  2429. /*
  2430. * This function always allocates a used segment(from dirty seglist) by SSR
  2431. * manner, so it should recover the existing segment information of valid blocks
  2432. */
  2433. static int change_curseg(struct f2fs_sb_info *sbi, int type)
  2434. {
  2435. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  2436. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2437. unsigned int new_segno = curseg->next_segno;
  2438. struct f2fs_summary_block *sum_node;
  2439. struct page *sum_page;
  2440. if (curseg->inited)
  2441. write_sum_page(sbi, curseg->sum_blk, GET_SUM_BLOCK(sbi, curseg->segno));
  2442. __set_test_and_inuse(sbi, new_segno);
  2443. mutex_lock(&dirty_i->seglist_lock);
  2444. __remove_dirty_segment(sbi, new_segno, PRE);
  2445. __remove_dirty_segment(sbi, new_segno, DIRTY);
  2446. mutex_unlock(&dirty_i->seglist_lock);
  2447. reset_curseg(sbi, type, 1);
  2448. curseg->alloc_type = SSR;
  2449. curseg->next_blkoff = __next_free_blkoff(sbi, curseg->segno, 0);
  2450. sum_page = f2fs_get_sum_page(sbi, new_segno);
  2451. if (IS_ERR(sum_page)) {
  2452. /* GC won't be able to use stale summary pages by cp_error */
  2453. memset(curseg->sum_blk, 0, SUM_ENTRY_SIZE);
  2454. return PTR_ERR(sum_page);
  2455. }
  2456. sum_node = (struct f2fs_summary_block *)page_address(sum_page);
  2457. memcpy(curseg->sum_blk, sum_node, SUM_ENTRY_SIZE);
  2458. f2fs_put_page(sum_page, 1);
  2459. return 0;
  2460. }
  2461. static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
  2462. int alloc_mode, unsigned long long age);
  2463. static int get_atssr_segment(struct f2fs_sb_info *sbi, int type,
  2464. int target_type, int alloc_mode,
  2465. unsigned long long age)
  2466. {
  2467. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2468. int ret = 0;
  2469. curseg->seg_type = target_type;
  2470. if (get_ssr_segment(sbi, type, alloc_mode, age)) {
  2471. struct seg_entry *se = get_seg_entry(sbi, curseg->next_segno);
  2472. curseg->seg_type = se->type;
  2473. ret = change_curseg(sbi, type);
  2474. } else {
  2475. /* allocate cold segment by default */
  2476. curseg->seg_type = CURSEG_COLD_DATA;
  2477. ret = new_curseg(sbi, type, true);
  2478. }
  2479. stat_inc_seg_type(sbi, curseg);
  2480. return ret;
  2481. }
  2482. static int __f2fs_init_atgc_curseg(struct f2fs_sb_info *sbi, bool force)
  2483. {
  2484. struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC);
  2485. int ret = 0;
  2486. if (!sbi->am.atgc_enabled && !force)
  2487. return 0;
  2488. f2fs_down_read(&SM_I(sbi)->curseg_lock);
  2489. mutex_lock(&curseg->curseg_mutex);
  2490. down_write(&SIT_I(sbi)->sentry_lock);
  2491. ret = get_atssr_segment(sbi, CURSEG_ALL_DATA_ATGC,
  2492. CURSEG_COLD_DATA, SSR, 0);
  2493. up_write(&SIT_I(sbi)->sentry_lock);
  2494. mutex_unlock(&curseg->curseg_mutex);
  2495. f2fs_up_read(&SM_I(sbi)->curseg_lock);
  2496. return ret;
  2497. }
  2498. int f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi)
  2499. {
  2500. return __f2fs_init_atgc_curseg(sbi, false);
  2501. }
  2502. int f2fs_reinit_atgc_curseg(struct f2fs_sb_info *sbi)
  2503. {
  2504. int ret;
  2505. if (!test_opt(sbi, ATGC))
  2506. return 0;
  2507. if (sbi->am.atgc_enabled)
  2508. return 0;
  2509. if (le64_to_cpu(F2FS_CKPT(sbi)->elapsed_time) <
  2510. sbi->am.age_threshold)
  2511. return 0;
  2512. ret = __f2fs_init_atgc_curseg(sbi, true);
  2513. if (!ret) {
  2514. sbi->am.atgc_enabled = true;
  2515. f2fs_info(sbi, "reenabled age threshold GC");
  2516. }
  2517. return ret;
  2518. }
  2519. static void __f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi, int type)
  2520. {
  2521. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2522. mutex_lock(&curseg->curseg_mutex);
  2523. if (!curseg->inited)
  2524. goto out;
  2525. if (get_valid_blocks(sbi, curseg->segno, false)) {
  2526. write_sum_page(sbi, curseg->sum_blk,
  2527. GET_SUM_BLOCK(sbi, curseg->segno));
  2528. } else {
  2529. mutex_lock(&DIRTY_I(sbi)->seglist_lock);
  2530. __set_test_and_free(sbi, curseg->segno, true);
  2531. mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
  2532. }
  2533. out:
  2534. mutex_unlock(&curseg->curseg_mutex);
  2535. }
  2536. void f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi)
  2537. {
  2538. __f2fs_save_inmem_curseg(sbi, CURSEG_COLD_DATA_PINNED);
  2539. if (sbi->am.atgc_enabled)
  2540. __f2fs_save_inmem_curseg(sbi, CURSEG_ALL_DATA_ATGC);
  2541. }
  2542. static void __f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi, int type)
  2543. {
  2544. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2545. mutex_lock(&curseg->curseg_mutex);
  2546. if (!curseg->inited)
  2547. goto out;
  2548. if (get_valid_blocks(sbi, curseg->segno, false))
  2549. goto out;
  2550. mutex_lock(&DIRTY_I(sbi)->seglist_lock);
  2551. __set_test_and_inuse(sbi, curseg->segno);
  2552. mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
  2553. out:
  2554. mutex_unlock(&curseg->curseg_mutex);
  2555. }
  2556. void f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi)
  2557. {
  2558. __f2fs_restore_inmem_curseg(sbi, CURSEG_COLD_DATA_PINNED);
  2559. if (sbi->am.atgc_enabled)
  2560. __f2fs_restore_inmem_curseg(sbi, CURSEG_ALL_DATA_ATGC);
  2561. }
  2562. static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
  2563. int alloc_mode, unsigned long long age)
  2564. {
  2565. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2566. unsigned segno = NULL_SEGNO;
  2567. unsigned short seg_type = curseg->seg_type;
  2568. int i, cnt;
  2569. bool reversed = false;
  2570. sanity_check_seg_type(sbi, seg_type);
  2571. /* f2fs_need_SSR() already forces to do this */
  2572. if (!f2fs_get_victim(sbi, &segno, BG_GC, seg_type,
  2573. alloc_mode, age, false)) {
  2574. curseg->next_segno = segno;
  2575. return 1;
  2576. }
  2577. /* For node segments, let's do SSR more intensively */
  2578. if (IS_NODESEG(seg_type)) {
  2579. if (seg_type >= CURSEG_WARM_NODE) {
  2580. reversed = true;
  2581. i = CURSEG_COLD_NODE;
  2582. } else {
  2583. i = CURSEG_HOT_NODE;
  2584. }
  2585. cnt = NR_CURSEG_NODE_TYPE;
  2586. } else {
  2587. if (seg_type >= CURSEG_WARM_DATA) {
  2588. reversed = true;
  2589. i = CURSEG_COLD_DATA;
  2590. } else {
  2591. i = CURSEG_HOT_DATA;
  2592. }
  2593. cnt = NR_CURSEG_DATA_TYPE;
  2594. }
  2595. for (; cnt-- > 0; reversed ? i-- : i++) {
  2596. if (i == seg_type)
  2597. continue;
  2598. if (!f2fs_get_victim(sbi, &segno, BG_GC, i,
  2599. alloc_mode, age, false)) {
  2600. curseg->next_segno = segno;
  2601. return 1;
  2602. }
  2603. }
  2604. /* find valid_blocks=0 in dirty list */
  2605. if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
  2606. segno = get_free_segment(sbi);
  2607. if (segno != NULL_SEGNO) {
  2608. curseg->next_segno = segno;
  2609. return 1;
  2610. }
  2611. }
  2612. return 0;
  2613. }
  2614. static bool need_new_seg(struct f2fs_sb_info *sbi, int type)
  2615. {
  2616. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2617. if (!is_set_ckpt_flags(sbi, CP_CRC_RECOVERY_FLAG) &&
  2618. curseg->seg_type == CURSEG_WARM_NODE)
  2619. return true;
  2620. if (curseg->alloc_type == LFS && is_next_segment_free(sbi, curseg) &&
  2621. likely(!is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
  2622. return true;
  2623. if (!f2fs_need_SSR(sbi) || !get_ssr_segment(sbi, type, SSR, 0))
  2624. return true;
  2625. return false;
  2626. }
  2627. int f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
  2628. unsigned int start, unsigned int end)
  2629. {
  2630. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2631. unsigned int segno;
  2632. int ret = 0;
  2633. f2fs_down_read(&SM_I(sbi)->curseg_lock);
  2634. mutex_lock(&curseg->curseg_mutex);
  2635. down_write(&SIT_I(sbi)->sentry_lock);
  2636. segno = CURSEG_I(sbi, type)->segno;
  2637. if (segno < start || segno > end)
  2638. goto unlock;
  2639. if (f2fs_need_SSR(sbi) && get_ssr_segment(sbi, type, SSR, 0))
  2640. ret = change_curseg(sbi, type);
  2641. else
  2642. ret = new_curseg(sbi, type, true);
  2643. stat_inc_seg_type(sbi, curseg);
  2644. locate_dirty_segment(sbi, segno);
  2645. unlock:
  2646. up_write(&SIT_I(sbi)->sentry_lock);
  2647. if (segno != curseg->segno)
  2648. f2fs_notice(sbi, "For resize: curseg of type %d: %u ==> %u",
  2649. type, segno, curseg->segno);
  2650. mutex_unlock(&curseg->curseg_mutex);
  2651. f2fs_up_read(&SM_I(sbi)->curseg_lock);
  2652. return ret;
  2653. }
  2654. static int __allocate_new_segment(struct f2fs_sb_info *sbi, int type,
  2655. bool new_sec, bool force)
  2656. {
  2657. struct curseg_info *curseg = CURSEG_I(sbi, type);
  2658. unsigned int old_segno;
  2659. int err = 0;
  2660. if (type == CURSEG_COLD_DATA_PINNED && !curseg->inited)
  2661. goto allocate;
  2662. if (!force && curseg->inited &&
  2663. !curseg->next_blkoff &&
  2664. !get_valid_blocks(sbi, curseg->segno, new_sec) &&
  2665. !get_ckpt_valid_blocks(sbi, curseg->segno, new_sec))
  2666. return 0;
  2667. allocate:
  2668. old_segno = curseg->segno;
  2669. err = new_curseg(sbi, type, true);
  2670. if (err)
  2671. return err;
  2672. stat_inc_seg_type(sbi, curseg);
  2673. locate_dirty_segment(sbi, old_segno);
  2674. return 0;
  2675. }
  2676. int f2fs_allocate_new_section(struct f2fs_sb_info *sbi, int type, bool force)
  2677. {
  2678. int ret;
  2679. f2fs_down_read(&SM_I(sbi)->curseg_lock);
  2680. down_write(&SIT_I(sbi)->sentry_lock);
  2681. ret = __allocate_new_segment(sbi, type, true, force);
  2682. up_write(&SIT_I(sbi)->sentry_lock);
  2683. f2fs_up_read(&SM_I(sbi)->curseg_lock);
  2684. return ret;
  2685. }
  2686. int f2fs_allocate_pinning_section(struct f2fs_sb_info *sbi)
  2687. {
  2688. int err;
  2689. bool gc_required = true;
  2690. retry:
  2691. f2fs_lock_op(sbi);
  2692. err = f2fs_allocate_new_section(sbi, CURSEG_COLD_DATA_PINNED, false);
  2693. f2fs_unlock_op(sbi);
  2694. if (f2fs_sb_has_blkzoned(sbi) && err == -EAGAIN && gc_required) {
  2695. f2fs_down_write(&sbi->gc_lock);
  2696. err = f2fs_gc_range(sbi, 0, GET_SEGNO(sbi, FDEV(0).end_blk), true, 1);
  2697. f2fs_up_write(&sbi->gc_lock);
  2698. gc_required = false;
  2699. if (!err)
  2700. goto retry;
  2701. }
  2702. return err;
  2703. }
  2704. int f2fs_allocate_new_segments(struct f2fs_sb_info *sbi)
  2705. {
  2706. int i;
  2707. int err = 0;
  2708. f2fs_down_read(&SM_I(sbi)->curseg_lock);
  2709. down_write(&SIT_I(sbi)->sentry_lock);
  2710. for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++)
  2711. err += __allocate_new_segment(sbi, i, false, false);
  2712. up_write(&SIT_I(sbi)->sentry_lock);
  2713. f2fs_up_read(&SM_I(sbi)->curseg_lock);
  2714. return err;
  2715. }
  2716. bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
  2717. struct cp_control *cpc)
  2718. {
  2719. __u64 trim_start = cpc->trim_start;
  2720. bool has_candidate = false;
  2721. down_write(&SIT_I(sbi)->sentry_lock);
  2722. for (; cpc->trim_start <= cpc->trim_end; cpc->trim_start++) {
  2723. if (add_discard_addrs(sbi, cpc, true)) {
  2724. has_candidate = true;
  2725. break;
  2726. }
  2727. }
  2728. up_write(&SIT_I(sbi)->sentry_lock);
  2729. cpc->trim_start = trim_start;
  2730. return has_candidate;
  2731. }
  2732. static unsigned int __issue_discard_cmd_range(struct f2fs_sb_info *sbi,
  2733. struct discard_policy *dpolicy,
  2734. unsigned int start, unsigned int end)
  2735. {
  2736. struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
  2737. struct discard_cmd *prev_dc = NULL, *next_dc = NULL;
  2738. struct rb_node **insert_p = NULL, *insert_parent = NULL;
  2739. struct discard_cmd *dc;
  2740. struct blk_plug plug;
  2741. int issued;
  2742. unsigned int trimmed = 0;
  2743. next:
  2744. issued = 0;
  2745. mutex_lock(&dcc->cmd_lock);
  2746. if (unlikely(dcc->rbtree_check))
  2747. f2fs_bug_on(sbi, !f2fs_check_discard_tree(sbi));
  2748. dc = __lookup_discard_cmd_ret(&dcc->root, start,
  2749. &prev_dc, &next_dc, &insert_p, &insert_parent);
  2750. if (!dc)
  2751. dc = next_dc;
  2752. blk_start_plug(&plug);
  2753. while (dc && dc->di.lstart <= end) {
  2754. struct rb_node *node;
  2755. int err = 0;
  2756. if (dc->di.len < dpolicy->granularity)
  2757. goto skip;
  2758. if (dc->state != D_PREP) {
  2759. list_move_tail(&dc->list, &dcc->fstrim_list);
  2760. goto skip;
  2761. }
  2762. err = __submit_discard_cmd(sbi, dpolicy, dc, &issued);
  2763. if (issued >= dpolicy->max_requests) {
  2764. start = dc->di.lstart + dc->di.len;
  2765. if (err)
  2766. __remove_discard_cmd(sbi, dc);
  2767. blk_finish_plug(&plug);
  2768. mutex_unlock(&dcc->cmd_lock);
  2769. trimmed += __wait_all_discard_cmd(sbi, NULL);
  2770. f2fs_io_schedule_timeout(DEFAULT_IO_TIMEOUT);
  2771. goto next;
  2772. }
  2773. skip:
  2774. node = rb_next(&dc->rb_node);
  2775. if (err)
  2776. __remove_discard_cmd(sbi, dc);
  2777. dc = rb_entry_safe(node, struct discard_cmd, rb_node);
  2778. if (fatal_signal_pending(current))
  2779. break;
  2780. }
  2781. blk_finish_plug(&plug);
  2782. mutex_unlock(&dcc->cmd_lock);
  2783. return trimmed;
  2784. }
  2785. int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range)
  2786. {
  2787. __u64 start = F2FS_BYTES_TO_BLK(range->start);
  2788. __u64 end = start + F2FS_BYTES_TO_BLK(range->len) - 1;
  2789. unsigned int start_segno, end_segno;
  2790. block_t start_block, end_block;
  2791. struct cp_control cpc;
  2792. struct discard_policy dpolicy;
  2793. unsigned long long trimmed = 0;
  2794. int err = 0;
  2795. bool need_align = f2fs_lfs_mode(sbi) && __is_large_section(sbi);
  2796. if (start >= MAX_BLKADDR(sbi) || range->len < sbi->blocksize)
  2797. return -EINVAL;
  2798. if (end < MAIN_BLKADDR(sbi))
  2799. goto out;
  2800. if (is_sbi_flag_set(sbi, SBI_NEED_FSCK)) {
  2801. f2fs_warn(sbi, "Found FS corruption, run fsck to fix.");
  2802. return -EFSCORRUPTED;
  2803. }
  2804. /* start/end segment number in main_area */
  2805. start_segno = (start <= MAIN_BLKADDR(sbi)) ? 0 : GET_SEGNO(sbi, start);
  2806. end_segno = (end >= MAX_BLKADDR(sbi)) ? MAIN_SEGS(sbi) - 1 :
  2807. GET_SEGNO(sbi, end);
  2808. if (need_align) {
  2809. start_segno = rounddown(start_segno, SEGS_PER_SEC(sbi));
  2810. end_segno = roundup(end_segno + 1, SEGS_PER_SEC(sbi)) - 1;
  2811. }
  2812. cpc.reason = CP_DISCARD;
  2813. cpc.trim_minlen = max_t(__u64, 1, F2FS_BYTES_TO_BLK(range->minlen));
  2814. cpc.trim_start = start_segno;
  2815. cpc.trim_end = end_segno;
  2816. if (sbi->discard_blks == 0)
  2817. goto out;
  2818. f2fs_down_write(&sbi->gc_lock);
  2819. stat_inc_cp_call_count(sbi, TOTAL_CALL);
  2820. err = f2fs_write_checkpoint(sbi, &cpc);
  2821. f2fs_up_write(&sbi->gc_lock);
  2822. if (err)
  2823. goto out;
  2824. /*
  2825. * We filed discard candidates, but actually we don't need to wait for
  2826. * all of them, since they'll be issued in idle time along with runtime
  2827. * discard option. User configuration looks like using runtime discard
  2828. * or periodic fstrim instead of it.
  2829. */
  2830. if (f2fs_realtime_discard_enable(sbi))
  2831. goto out;
  2832. start_block = START_BLOCK(sbi, start_segno);
  2833. end_block = START_BLOCK(sbi, end_segno + 1);
  2834. __init_discard_policy(sbi, &dpolicy, DPOLICY_FSTRIM, cpc.trim_minlen);
  2835. trimmed = __issue_discard_cmd_range(sbi, &dpolicy,
  2836. start_block, end_block);
  2837. trimmed += __wait_discard_cmd_range(sbi, &dpolicy,
  2838. start_block, end_block);
  2839. out:
  2840. if (!err)
  2841. range->len = F2FS_BLK_TO_BYTES(trimmed);
  2842. return err;
  2843. }
  2844. int f2fs_rw_hint_to_seg_type(struct f2fs_sb_info *sbi, enum rw_hint hint)
  2845. {
  2846. if (F2FS_OPTION(sbi).active_logs == 2)
  2847. return CURSEG_HOT_DATA;
  2848. else if (F2FS_OPTION(sbi).active_logs == 4)
  2849. return CURSEG_COLD_DATA;
  2850. /* active_log == 6 */
  2851. switch (hint) {
  2852. case WRITE_LIFE_SHORT:
  2853. return CURSEG_HOT_DATA;
  2854. case WRITE_LIFE_EXTREME:
  2855. return CURSEG_COLD_DATA;
  2856. default:
  2857. return CURSEG_WARM_DATA;
  2858. }
  2859. }
  2860. /*
  2861. * This returns write hints for each segment type. This hints will be
  2862. * passed down to block layer as below by default.
  2863. *
  2864. * User F2FS Block
  2865. * ---- ---- -----
  2866. * META WRITE_LIFE_NONE|REQ_META
  2867. * HOT_NODE WRITE_LIFE_NONE
  2868. * WARM_NODE WRITE_LIFE_MEDIUM
  2869. * COLD_NODE WRITE_LIFE_LONG
  2870. * ioctl(COLD) COLD_DATA WRITE_LIFE_EXTREME
  2871. * extension list " "
  2872. *
  2873. * -- buffered io
  2874. * COLD_DATA WRITE_LIFE_EXTREME
  2875. * HOT_DATA WRITE_LIFE_SHORT
  2876. * WARM_DATA WRITE_LIFE_NOT_SET
  2877. *
  2878. * -- direct io
  2879. * WRITE_LIFE_EXTREME COLD_DATA WRITE_LIFE_EXTREME
  2880. * WRITE_LIFE_SHORT HOT_DATA WRITE_LIFE_SHORT
  2881. * WRITE_LIFE_NOT_SET WARM_DATA WRITE_LIFE_NOT_SET
  2882. * WRITE_LIFE_NONE " WRITE_LIFE_NONE
  2883. * WRITE_LIFE_MEDIUM " WRITE_LIFE_MEDIUM
  2884. * WRITE_LIFE_LONG " WRITE_LIFE_LONG
  2885. */
  2886. enum rw_hint f2fs_io_type_to_rw_hint(struct f2fs_sb_info *sbi,
  2887. enum page_type type, enum temp_type temp)
  2888. {
  2889. switch (type) {
  2890. case DATA:
  2891. switch (temp) {
  2892. case WARM:
  2893. return WRITE_LIFE_NOT_SET;
  2894. case HOT:
  2895. return WRITE_LIFE_SHORT;
  2896. case COLD:
  2897. return WRITE_LIFE_EXTREME;
  2898. default:
  2899. return WRITE_LIFE_NONE;
  2900. }
  2901. case NODE:
  2902. switch (temp) {
  2903. case WARM:
  2904. return WRITE_LIFE_MEDIUM;
  2905. case HOT:
  2906. return WRITE_LIFE_NONE;
  2907. case COLD:
  2908. return WRITE_LIFE_LONG;
  2909. default:
  2910. return WRITE_LIFE_NONE;
  2911. }
  2912. case META:
  2913. return WRITE_LIFE_NONE;
  2914. default:
  2915. return WRITE_LIFE_NONE;
  2916. }
  2917. }
  2918. static int __get_segment_type_2(struct f2fs_io_info *fio)
  2919. {
  2920. if (fio->type == DATA)
  2921. return CURSEG_HOT_DATA;
  2922. else
  2923. return CURSEG_HOT_NODE;
  2924. }
  2925. static int __get_segment_type_4(struct f2fs_io_info *fio)
  2926. {
  2927. if (fio->type == DATA) {
  2928. struct inode *inode = fio->page->mapping->host;
  2929. if (S_ISDIR(inode->i_mode))
  2930. return CURSEG_HOT_DATA;
  2931. else
  2932. return CURSEG_COLD_DATA;
  2933. } else {
  2934. if (IS_DNODE(fio->page) && is_cold_node(fio->page))
  2935. return CURSEG_WARM_NODE;
  2936. else
  2937. return CURSEG_COLD_NODE;
  2938. }
  2939. }
  2940. static int __get_age_segment_type(struct inode *inode, pgoff_t pgofs)
  2941. {
  2942. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2943. struct extent_info ei = {};
  2944. if (f2fs_lookup_age_extent_cache(inode, pgofs, &ei)) {
  2945. if (!ei.age)
  2946. return NO_CHECK_TYPE;
  2947. if (ei.age <= sbi->hot_data_age_threshold)
  2948. return CURSEG_HOT_DATA;
  2949. if (ei.age <= sbi->warm_data_age_threshold)
  2950. return CURSEG_WARM_DATA;
  2951. return CURSEG_COLD_DATA;
  2952. }
  2953. return NO_CHECK_TYPE;
  2954. }
  2955. static int __get_segment_type_6(struct f2fs_io_info *fio)
  2956. {
  2957. if (fio->type == DATA) {
  2958. struct inode *inode = fio->page->mapping->host;
  2959. int type;
  2960. if (is_inode_flag_set(inode, FI_ALIGNED_WRITE))
  2961. return CURSEG_COLD_DATA_PINNED;
  2962. if (page_private_gcing(fio->page)) {
  2963. if (fio->sbi->am.atgc_enabled &&
  2964. (fio->io_type == FS_DATA_IO) &&
  2965. (fio->sbi->gc_mode != GC_URGENT_HIGH) &&
  2966. __is_valid_data_blkaddr(fio->old_blkaddr) &&
  2967. !is_inode_flag_set(inode, FI_OPU_WRITE))
  2968. return CURSEG_ALL_DATA_ATGC;
  2969. else
  2970. return CURSEG_COLD_DATA;
  2971. }
  2972. if (file_is_cold(inode) || f2fs_need_compress_data(inode))
  2973. return CURSEG_COLD_DATA;
  2974. type = __get_age_segment_type(inode,
  2975. page_folio(fio->page)->index);
  2976. if (type != NO_CHECK_TYPE)
  2977. return type;
  2978. if (file_is_hot(inode) ||
  2979. is_inode_flag_set(inode, FI_HOT_DATA) ||
  2980. f2fs_is_cow_file(inode))
  2981. return CURSEG_HOT_DATA;
  2982. return f2fs_rw_hint_to_seg_type(F2FS_I_SB(inode),
  2983. inode->i_write_hint);
  2984. } else {
  2985. if (IS_DNODE(fio->page))
  2986. return is_cold_node(fio->page) ? CURSEG_WARM_NODE :
  2987. CURSEG_HOT_NODE;
  2988. return CURSEG_COLD_NODE;
  2989. }
  2990. }
  2991. int f2fs_get_segment_temp(int seg_type)
  2992. {
  2993. if (IS_HOT(seg_type))
  2994. return HOT;
  2995. else if (IS_WARM(seg_type))
  2996. return WARM;
  2997. return COLD;
  2998. }
  2999. static int __get_segment_type(struct f2fs_io_info *fio)
  3000. {
  3001. int type = 0;
  3002. switch (F2FS_OPTION(fio->sbi).active_logs) {
  3003. case 2:
  3004. type = __get_segment_type_2(fio);
  3005. break;
  3006. case 4:
  3007. type = __get_segment_type_4(fio);
  3008. break;
  3009. case 6:
  3010. type = __get_segment_type_6(fio);
  3011. break;
  3012. default:
  3013. f2fs_bug_on(fio->sbi, true);
  3014. }
  3015. fio->temp = f2fs_get_segment_temp(type);
  3016. return type;
  3017. }
  3018. static void f2fs_randomize_chunk(struct f2fs_sb_info *sbi,
  3019. struct curseg_info *seg)
  3020. {
  3021. /* To allocate block chunks in different sizes, use random number */
  3022. if (--seg->fragment_remained_chunk > 0)
  3023. return;
  3024. seg->fragment_remained_chunk =
  3025. get_random_u32_inclusive(1, sbi->max_fragment_chunk);
  3026. seg->next_blkoff +=
  3027. get_random_u32_inclusive(1, sbi->max_fragment_hole);
  3028. }
  3029. static void reset_curseg_fields(struct curseg_info *curseg)
  3030. {
  3031. curseg->inited = false;
  3032. curseg->segno = NULL_SEGNO;
  3033. curseg->next_segno = 0;
  3034. }
  3035. int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
  3036. block_t old_blkaddr, block_t *new_blkaddr,
  3037. struct f2fs_summary *sum, int type,
  3038. struct f2fs_io_info *fio)
  3039. {
  3040. struct sit_info *sit_i = SIT_I(sbi);
  3041. struct curseg_info *curseg = CURSEG_I(sbi, type);
  3042. unsigned long long old_mtime;
  3043. bool from_gc = (type == CURSEG_ALL_DATA_ATGC);
  3044. struct seg_entry *se = NULL;
  3045. bool segment_full = false;
  3046. int ret = 0;
  3047. f2fs_down_read(&SM_I(sbi)->curseg_lock);
  3048. mutex_lock(&curseg->curseg_mutex);
  3049. down_write(&sit_i->sentry_lock);
  3050. if (curseg->segno == NULL_SEGNO) {
  3051. ret = -ENOSPC;
  3052. goto out_err;
  3053. }
  3054. if (from_gc) {
  3055. f2fs_bug_on(sbi, GET_SEGNO(sbi, old_blkaddr) == NULL_SEGNO);
  3056. se = get_seg_entry(sbi, GET_SEGNO(sbi, old_blkaddr));
  3057. sanity_check_seg_type(sbi, se->type);
  3058. f2fs_bug_on(sbi, IS_NODESEG(se->type));
  3059. }
  3060. *new_blkaddr = NEXT_FREE_BLKADDR(sbi, curseg);
  3061. f2fs_bug_on(sbi, curseg->next_blkoff >= BLKS_PER_SEG(sbi));
  3062. f2fs_wait_discard_bio(sbi, *new_blkaddr);
  3063. curseg->sum_blk->entries[curseg->next_blkoff] = *sum;
  3064. if (curseg->alloc_type == SSR) {
  3065. curseg->next_blkoff = f2fs_find_next_ssr_block(sbi, curseg);
  3066. } else {
  3067. curseg->next_blkoff++;
  3068. if (F2FS_OPTION(sbi).fs_mode == FS_MODE_FRAGMENT_BLK)
  3069. f2fs_randomize_chunk(sbi, curseg);
  3070. }
  3071. if (curseg->next_blkoff >= f2fs_usable_blks_in_seg(sbi, curseg->segno))
  3072. segment_full = true;
  3073. stat_inc_block_count(sbi, curseg);
  3074. if (from_gc) {
  3075. old_mtime = get_segment_mtime(sbi, old_blkaddr);
  3076. } else {
  3077. update_segment_mtime(sbi, old_blkaddr, 0);
  3078. old_mtime = 0;
  3079. }
  3080. update_segment_mtime(sbi, *new_blkaddr, old_mtime);
  3081. /*
  3082. * SIT information should be updated before segment allocation,
  3083. * since SSR needs latest valid block information.
  3084. */
  3085. update_sit_entry(sbi, *new_blkaddr, 1);
  3086. update_sit_entry(sbi, old_blkaddr, -1);
  3087. /*
  3088. * If the current segment is full, flush it out and replace it with a
  3089. * new segment.
  3090. */
  3091. if (segment_full) {
  3092. if (type == CURSEG_COLD_DATA_PINNED &&
  3093. !((curseg->segno + 1) % sbi->segs_per_sec)) {
  3094. write_sum_page(sbi, curseg->sum_blk,
  3095. GET_SUM_BLOCK(sbi, curseg->segno));
  3096. reset_curseg_fields(curseg);
  3097. goto skip_new_segment;
  3098. }
  3099. if (from_gc) {
  3100. ret = get_atssr_segment(sbi, type, se->type,
  3101. AT_SSR, se->mtime);
  3102. } else {
  3103. if (need_new_seg(sbi, type))
  3104. ret = new_curseg(sbi, type, false);
  3105. else
  3106. ret = change_curseg(sbi, type);
  3107. stat_inc_seg_type(sbi, curseg);
  3108. }
  3109. if (ret)
  3110. goto out_err;
  3111. }
  3112. skip_new_segment:
  3113. /*
  3114. * segment dirty status should be updated after segment allocation,
  3115. * so we just need to update status only one time after previous
  3116. * segment being closed.
  3117. */
  3118. locate_dirty_segment(sbi, GET_SEGNO(sbi, old_blkaddr));
  3119. locate_dirty_segment(sbi, GET_SEGNO(sbi, *new_blkaddr));
  3120. if (IS_DATASEG(curseg->seg_type))
  3121. atomic64_inc(&sbi->allocated_data_blocks);
  3122. up_write(&sit_i->sentry_lock);
  3123. if (page && IS_NODESEG(curseg->seg_type)) {
  3124. fill_node_footer_blkaddr(page, NEXT_FREE_BLKADDR(sbi, curseg));
  3125. f2fs_inode_chksum_set(sbi, page);
  3126. }
  3127. if (fio) {
  3128. struct f2fs_bio_info *io;
  3129. INIT_LIST_HEAD(&fio->list);
  3130. fio->in_list = 1;
  3131. io = sbi->write_io[fio->type] + fio->temp;
  3132. spin_lock(&io->io_lock);
  3133. list_add_tail(&fio->list, &io->io_list);
  3134. spin_unlock(&io->io_lock);
  3135. }
  3136. mutex_unlock(&curseg->curseg_mutex);
  3137. f2fs_up_read(&SM_I(sbi)->curseg_lock);
  3138. return 0;
  3139. out_err:
  3140. *new_blkaddr = NULL_ADDR;
  3141. up_write(&sit_i->sentry_lock);
  3142. mutex_unlock(&curseg->curseg_mutex);
  3143. f2fs_up_read(&SM_I(sbi)->curseg_lock);
  3144. return ret;
  3145. }
  3146. void f2fs_update_device_state(struct f2fs_sb_info *sbi, nid_t ino,
  3147. block_t blkaddr, unsigned int blkcnt)
  3148. {
  3149. if (!f2fs_is_multi_device(sbi))
  3150. return;
  3151. while (1) {
  3152. unsigned int devidx = f2fs_target_device_index(sbi, blkaddr);
  3153. unsigned int blks = FDEV(devidx).end_blk - blkaddr + 1;
  3154. /* update device state for fsync */
  3155. f2fs_set_dirty_device(sbi, ino, devidx, FLUSH_INO);
  3156. /* update device state for checkpoint */
  3157. if (!f2fs_test_bit(devidx, (char *)&sbi->dirty_device)) {
  3158. spin_lock(&sbi->dev_lock);
  3159. f2fs_set_bit(devidx, (char *)&sbi->dirty_device);
  3160. spin_unlock(&sbi->dev_lock);
  3161. }
  3162. if (blkcnt <= blks)
  3163. break;
  3164. blkcnt -= blks;
  3165. blkaddr += blks;
  3166. }
  3167. }
  3168. static void do_write_page(struct f2fs_summary *sum, struct f2fs_io_info *fio)
  3169. {
  3170. int type = __get_segment_type(fio);
  3171. bool keep_order = (f2fs_lfs_mode(fio->sbi) && type == CURSEG_COLD_DATA);
  3172. if (keep_order)
  3173. f2fs_down_read(&fio->sbi->io_order_lock);
  3174. if (f2fs_allocate_data_block(fio->sbi, fio->page, fio->old_blkaddr,
  3175. &fio->new_blkaddr, sum, type, fio)) {
  3176. if (fscrypt_inode_uses_fs_layer_crypto(fio->page->mapping->host))
  3177. fscrypt_finalize_bounce_page(&fio->encrypted_page);
  3178. end_page_writeback(fio->page);
  3179. if (f2fs_in_warm_node_list(fio->sbi, fio->page))
  3180. f2fs_del_fsync_node_entry(fio->sbi, fio->page);
  3181. goto out;
  3182. }
  3183. if (GET_SEGNO(fio->sbi, fio->old_blkaddr) != NULL_SEGNO)
  3184. f2fs_invalidate_internal_cache(fio->sbi, fio->old_blkaddr);
  3185. /* writeout dirty page into bdev */
  3186. f2fs_submit_page_write(fio);
  3187. f2fs_update_device_state(fio->sbi, fio->ino, fio->new_blkaddr, 1);
  3188. out:
  3189. if (keep_order)
  3190. f2fs_up_read(&fio->sbi->io_order_lock);
  3191. }
  3192. void f2fs_do_write_meta_page(struct f2fs_sb_info *sbi, struct folio *folio,
  3193. enum iostat_type io_type)
  3194. {
  3195. struct f2fs_io_info fio = {
  3196. .sbi = sbi,
  3197. .type = META,
  3198. .temp = HOT,
  3199. .op = REQ_OP_WRITE,
  3200. .op_flags = REQ_SYNC | REQ_META | REQ_PRIO,
  3201. .old_blkaddr = folio->index,
  3202. .new_blkaddr = folio->index,
  3203. .page = folio_page(folio, 0),
  3204. .encrypted_page = NULL,
  3205. .in_list = 0,
  3206. };
  3207. if (unlikely(folio->index >= MAIN_BLKADDR(sbi)))
  3208. fio.op_flags &= ~REQ_META;
  3209. folio_start_writeback(folio);
  3210. f2fs_submit_page_write(&fio);
  3211. stat_inc_meta_count(sbi, folio->index);
  3212. f2fs_update_iostat(sbi, NULL, io_type, F2FS_BLKSIZE);
  3213. }
  3214. void f2fs_do_write_node_page(unsigned int nid, struct f2fs_io_info *fio)
  3215. {
  3216. struct f2fs_summary sum;
  3217. set_summary(&sum, nid, 0, 0);
  3218. do_write_page(&sum, fio);
  3219. f2fs_update_iostat(fio->sbi, NULL, fio->io_type, F2FS_BLKSIZE);
  3220. }
  3221. void f2fs_outplace_write_data(struct dnode_of_data *dn,
  3222. struct f2fs_io_info *fio)
  3223. {
  3224. struct f2fs_sb_info *sbi = fio->sbi;
  3225. struct f2fs_summary sum;
  3226. f2fs_bug_on(sbi, dn->data_blkaddr == NULL_ADDR);
  3227. if (fio->io_type == FS_DATA_IO || fio->io_type == FS_CP_DATA_IO)
  3228. f2fs_update_age_extent_cache(dn);
  3229. set_summary(&sum, dn->nid, dn->ofs_in_node, fio->version);
  3230. do_write_page(&sum, fio);
  3231. f2fs_update_data_blkaddr(dn, fio->new_blkaddr);
  3232. f2fs_update_iostat(sbi, dn->inode, fio->io_type, F2FS_BLKSIZE);
  3233. }
  3234. int f2fs_inplace_write_data(struct f2fs_io_info *fio)
  3235. {
  3236. int err;
  3237. struct f2fs_sb_info *sbi = fio->sbi;
  3238. unsigned int segno;
  3239. fio->new_blkaddr = fio->old_blkaddr;
  3240. /* i/o temperature is needed for passing down write hints */
  3241. __get_segment_type(fio);
  3242. segno = GET_SEGNO(sbi, fio->new_blkaddr);
  3243. if (!IS_DATASEG(get_seg_entry(sbi, segno)->type)) {
  3244. set_sbi_flag(sbi, SBI_NEED_FSCK);
  3245. f2fs_warn(sbi, "%s: incorrect segment(%u) type, run fsck to fix.",
  3246. __func__, segno);
  3247. err = -EFSCORRUPTED;
  3248. f2fs_handle_error(sbi, ERROR_INCONSISTENT_SUM_TYPE);
  3249. goto drop_bio;
  3250. }
  3251. if (f2fs_cp_error(sbi)) {
  3252. err = -EIO;
  3253. goto drop_bio;
  3254. }
  3255. if (fio->meta_gc)
  3256. f2fs_truncate_meta_inode_pages(sbi, fio->new_blkaddr, 1);
  3257. stat_inc_inplace_blocks(fio->sbi);
  3258. if (fio->bio && !IS_F2FS_IPU_NOCACHE(sbi))
  3259. err = f2fs_merge_page_bio(fio);
  3260. else
  3261. err = f2fs_submit_page_bio(fio);
  3262. if (!err) {
  3263. f2fs_update_device_state(fio->sbi, fio->ino,
  3264. fio->new_blkaddr, 1);
  3265. f2fs_update_iostat(fio->sbi, fio->page->mapping->host,
  3266. fio->io_type, F2FS_BLKSIZE);
  3267. }
  3268. return err;
  3269. drop_bio:
  3270. if (fio->bio && *(fio->bio)) {
  3271. struct bio *bio = *(fio->bio);
  3272. bio->bi_status = BLK_STS_IOERR;
  3273. bio_endio(bio);
  3274. *(fio->bio) = NULL;
  3275. }
  3276. return err;
  3277. }
  3278. static inline int __f2fs_get_curseg(struct f2fs_sb_info *sbi,
  3279. unsigned int segno)
  3280. {
  3281. int i;
  3282. for (i = CURSEG_HOT_DATA; i < NO_CHECK_TYPE; i++) {
  3283. if (CURSEG_I(sbi, i)->segno == segno)
  3284. break;
  3285. }
  3286. return i;
  3287. }
  3288. void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
  3289. block_t old_blkaddr, block_t new_blkaddr,
  3290. bool recover_curseg, bool recover_newaddr,
  3291. bool from_gc)
  3292. {
  3293. struct sit_info *sit_i = SIT_I(sbi);
  3294. struct curseg_info *curseg;
  3295. unsigned int segno, old_cursegno;
  3296. struct seg_entry *se;
  3297. int type;
  3298. unsigned short old_blkoff;
  3299. unsigned char old_alloc_type;
  3300. segno = GET_SEGNO(sbi, new_blkaddr);
  3301. se = get_seg_entry(sbi, segno);
  3302. type = se->type;
  3303. f2fs_down_write(&SM_I(sbi)->curseg_lock);
  3304. if (!recover_curseg) {
  3305. /* for recovery flow */
  3306. if (se->valid_blocks == 0 && !IS_CURSEG(sbi, segno)) {
  3307. if (old_blkaddr == NULL_ADDR)
  3308. type = CURSEG_COLD_DATA;
  3309. else
  3310. type = CURSEG_WARM_DATA;
  3311. }
  3312. } else {
  3313. if (IS_CURSEG(sbi, segno)) {
  3314. /* se->type is volatile as SSR allocation */
  3315. type = __f2fs_get_curseg(sbi, segno);
  3316. f2fs_bug_on(sbi, type == NO_CHECK_TYPE);
  3317. } else {
  3318. type = CURSEG_WARM_DATA;
  3319. }
  3320. }
  3321. curseg = CURSEG_I(sbi, type);
  3322. f2fs_bug_on(sbi, !IS_DATASEG(curseg->seg_type));
  3323. mutex_lock(&curseg->curseg_mutex);
  3324. down_write(&sit_i->sentry_lock);
  3325. old_cursegno = curseg->segno;
  3326. old_blkoff = curseg->next_blkoff;
  3327. old_alloc_type = curseg->alloc_type;
  3328. /* change the current segment */
  3329. if (segno != curseg->segno) {
  3330. curseg->next_segno = segno;
  3331. if (change_curseg(sbi, type))
  3332. goto out_unlock;
  3333. }
  3334. curseg->next_blkoff = GET_BLKOFF_FROM_SEG0(sbi, new_blkaddr);
  3335. curseg->sum_blk->entries[curseg->next_blkoff] = *sum;
  3336. if (!recover_curseg || recover_newaddr) {
  3337. if (!from_gc)
  3338. update_segment_mtime(sbi, new_blkaddr, 0);
  3339. update_sit_entry(sbi, new_blkaddr, 1);
  3340. }
  3341. if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO) {
  3342. f2fs_invalidate_internal_cache(sbi, old_blkaddr);
  3343. if (!from_gc)
  3344. update_segment_mtime(sbi, old_blkaddr, 0);
  3345. update_sit_entry(sbi, old_blkaddr, -1);
  3346. }
  3347. locate_dirty_segment(sbi, GET_SEGNO(sbi, old_blkaddr));
  3348. locate_dirty_segment(sbi, GET_SEGNO(sbi, new_blkaddr));
  3349. locate_dirty_segment(sbi, old_cursegno);
  3350. if (recover_curseg) {
  3351. if (old_cursegno != curseg->segno) {
  3352. curseg->next_segno = old_cursegno;
  3353. if (change_curseg(sbi, type))
  3354. goto out_unlock;
  3355. }
  3356. curseg->next_blkoff = old_blkoff;
  3357. curseg->alloc_type = old_alloc_type;
  3358. }
  3359. out_unlock:
  3360. up_write(&sit_i->sentry_lock);
  3361. mutex_unlock(&curseg->curseg_mutex);
  3362. f2fs_up_write(&SM_I(sbi)->curseg_lock);
  3363. }
  3364. void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
  3365. block_t old_addr, block_t new_addr,
  3366. unsigned char version, bool recover_curseg,
  3367. bool recover_newaddr)
  3368. {
  3369. struct f2fs_summary sum;
  3370. set_summary(&sum, dn->nid, dn->ofs_in_node, version);
  3371. f2fs_do_replace_block(sbi, &sum, old_addr, new_addr,
  3372. recover_curseg, recover_newaddr, false);
  3373. f2fs_update_data_blkaddr(dn, new_addr);
  3374. }
  3375. void f2fs_wait_on_page_writeback(struct page *page,
  3376. enum page_type type, bool ordered, bool locked)
  3377. {
  3378. if (folio_test_writeback(page_folio(page))) {
  3379. struct f2fs_sb_info *sbi = F2FS_P_SB(page);
  3380. /* submit cached LFS IO */
  3381. f2fs_submit_merged_write_cond(sbi, NULL, page, 0, type);
  3382. /* submit cached IPU IO */
  3383. f2fs_submit_merged_ipu_write(sbi, NULL, page);
  3384. if (ordered) {
  3385. wait_on_page_writeback(page);
  3386. f2fs_bug_on(sbi, locked &&
  3387. folio_test_writeback(page_folio(page)));
  3388. } else {
  3389. wait_for_stable_page(page);
  3390. }
  3391. }
  3392. }
  3393. void f2fs_wait_on_block_writeback(struct inode *inode, block_t blkaddr)
  3394. {
  3395. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3396. struct page *cpage;
  3397. if (!f2fs_meta_inode_gc_required(inode))
  3398. return;
  3399. if (!__is_valid_data_blkaddr(blkaddr))
  3400. return;
  3401. cpage = find_lock_page(META_MAPPING(sbi), blkaddr);
  3402. if (cpage) {
  3403. f2fs_wait_on_page_writeback(cpage, DATA, true, true);
  3404. f2fs_put_page(cpage, 1);
  3405. }
  3406. }
  3407. void f2fs_wait_on_block_writeback_range(struct inode *inode, block_t blkaddr,
  3408. block_t len)
  3409. {
  3410. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3411. block_t i;
  3412. if (!f2fs_meta_inode_gc_required(inode))
  3413. return;
  3414. for (i = 0; i < len; i++)
  3415. f2fs_wait_on_block_writeback(inode, blkaddr + i);
  3416. f2fs_truncate_meta_inode_pages(sbi, blkaddr, len);
  3417. }
  3418. static int read_compacted_summaries(struct f2fs_sb_info *sbi)
  3419. {
  3420. struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
  3421. struct curseg_info *seg_i;
  3422. unsigned char *kaddr;
  3423. struct page *page;
  3424. block_t start;
  3425. int i, j, offset;
  3426. start = start_sum_block(sbi);
  3427. page = f2fs_get_meta_page(sbi, start++);
  3428. if (IS_ERR(page))
  3429. return PTR_ERR(page);
  3430. kaddr = (unsigned char *)page_address(page);
  3431. /* Step 1: restore nat cache */
  3432. seg_i = CURSEG_I(sbi, CURSEG_HOT_DATA);
  3433. memcpy(seg_i->journal, kaddr, SUM_JOURNAL_SIZE);
  3434. /* Step 2: restore sit cache */
  3435. seg_i = CURSEG_I(sbi, CURSEG_COLD_DATA);
  3436. memcpy(seg_i->journal, kaddr + SUM_JOURNAL_SIZE, SUM_JOURNAL_SIZE);
  3437. offset = 2 * SUM_JOURNAL_SIZE;
  3438. /* Step 3: restore summary entries */
  3439. for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
  3440. unsigned short blk_off;
  3441. unsigned int segno;
  3442. seg_i = CURSEG_I(sbi, i);
  3443. segno = le32_to_cpu(ckpt->cur_data_segno[i]);
  3444. blk_off = le16_to_cpu(ckpt->cur_data_blkoff[i]);
  3445. seg_i->next_segno = segno;
  3446. reset_curseg(sbi, i, 0);
  3447. seg_i->alloc_type = ckpt->alloc_type[i];
  3448. seg_i->next_blkoff = blk_off;
  3449. if (seg_i->alloc_type == SSR)
  3450. blk_off = BLKS_PER_SEG(sbi);
  3451. for (j = 0; j < blk_off; j++) {
  3452. struct f2fs_summary *s;
  3453. s = (struct f2fs_summary *)(kaddr + offset);
  3454. seg_i->sum_blk->entries[j] = *s;
  3455. offset += SUMMARY_SIZE;
  3456. if (offset + SUMMARY_SIZE <= PAGE_SIZE -
  3457. SUM_FOOTER_SIZE)
  3458. continue;
  3459. f2fs_put_page(page, 1);
  3460. page = NULL;
  3461. page = f2fs_get_meta_page(sbi, start++);
  3462. if (IS_ERR(page))
  3463. return PTR_ERR(page);
  3464. kaddr = (unsigned char *)page_address(page);
  3465. offset = 0;
  3466. }
  3467. }
  3468. f2fs_put_page(page, 1);
  3469. return 0;
  3470. }
  3471. static int read_normal_summaries(struct f2fs_sb_info *sbi, int type)
  3472. {
  3473. struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
  3474. struct f2fs_summary_block *sum;
  3475. struct curseg_info *curseg;
  3476. struct page *new;
  3477. unsigned short blk_off;
  3478. unsigned int segno = 0;
  3479. block_t blk_addr = 0;
  3480. int err = 0;
  3481. /* get segment number and block addr */
  3482. if (IS_DATASEG(type)) {
  3483. segno = le32_to_cpu(ckpt->cur_data_segno[type]);
  3484. blk_off = le16_to_cpu(ckpt->cur_data_blkoff[type -
  3485. CURSEG_HOT_DATA]);
  3486. if (__exist_node_summaries(sbi))
  3487. blk_addr = sum_blk_addr(sbi, NR_CURSEG_PERSIST_TYPE, type);
  3488. else
  3489. blk_addr = sum_blk_addr(sbi, NR_CURSEG_DATA_TYPE, type);
  3490. } else {
  3491. segno = le32_to_cpu(ckpt->cur_node_segno[type -
  3492. CURSEG_HOT_NODE]);
  3493. blk_off = le16_to_cpu(ckpt->cur_node_blkoff[type -
  3494. CURSEG_HOT_NODE]);
  3495. if (__exist_node_summaries(sbi))
  3496. blk_addr = sum_blk_addr(sbi, NR_CURSEG_NODE_TYPE,
  3497. type - CURSEG_HOT_NODE);
  3498. else
  3499. blk_addr = GET_SUM_BLOCK(sbi, segno);
  3500. }
  3501. new = f2fs_get_meta_page(sbi, blk_addr);
  3502. if (IS_ERR(new))
  3503. return PTR_ERR(new);
  3504. sum = (struct f2fs_summary_block *)page_address(new);
  3505. if (IS_NODESEG(type)) {
  3506. if (__exist_node_summaries(sbi)) {
  3507. struct f2fs_summary *ns = &sum->entries[0];
  3508. int i;
  3509. for (i = 0; i < BLKS_PER_SEG(sbi); i++, ns++) {
  3510. ns->version = 0;
  3511. ns->ofs_in_node = 0;
  3512. }
  3513. } else {
  3514. err = f2fs_restore_node_summary(sbi, segno, sum);
  3515. if (err)
  3516. goto out;
  3517. }
  3518. }
  3519. /* set uncompleted segment to curseg */
  3520. curseg = CURSEG_I(sbi, type);
  3521. mutex_lock(&curseg->curseg_mutex);
  3522. /* update journal info */
  3523. down_write(&curseg->journal_rwsem);
  3524. memcpy(curseg->journal, &sum->journal, SUM_JOURNAL_SIZE);
  3525. up_write(&curseg->journal_rwsem);
  3526. memcpy(curseg->sum_blk->entries, sum->entries, SUM_ENTRY_SIZE);
  3527. memcpy(&curseg->sum_blk->footer, &sum->footer, SUM_FOOTER_SIZE);
  3528. curseg->next_segno = segno;
  3529. reset_curseg(sbi, type, 0);
  3530. curseg->alloc_type = ckpt->alloc_type[type];
  3531. curseg->next_blkoff = blk_off;
  3532. mutex_unlock(&curseg->curseg_mutex);
  3533. out:
  3534. f2fs_put_page(new, 1);
  3535. return err;
  3536. }
  3537. static int restore_curseg_summaries(struct f2fs_sb_info *sbi)
  3538. {
  3539. struct f2fs_journal *sit_j = CURSEG_I(sbi, CURSEG_COLD_DATA)->journal;
  3540. struct f2fs_journal *nat_j = CURSEG_I(sbi, CURSEG_HOT_DATA)->journal;
  3541. int type = CURSEG_HOT_DATA;
  3542. int err;
  3543. if (is_set_ckpt_flags(sbi, CP_COMPACT_SUM_FLAG)) {
  3544. int npages = f2fs_npages_for_summary_flush(sbi, true);
  3545. if (npages >= 2)
  3546. f2fs_ra_meta_pages(sbi, start_sum_block(sbi), npages,
  3547. META_CP, true);
  3548. /* restore for compacted data summary */
  3549. err = read_compacted_summaries(sbi);
  3550. if (err)
  3551. return err;
  3552. type = CURSEG_HOT_NODE;
  3553. }
  3554. if (__exist_node_summaries(sbi))
  3555. f2fs_ra_meta_pages(sbi,
  3556. sum_blk_addr(sbi, NR_CURSEG_PERSIST_TYPE, type),
  3557. NR_CURSEG_PERSIST_TYPE - type, META_CP, true);
  3558. for (; type <= CURSEG_COLD_NODE; type++) {
  3559. err = read_normal_summaries(sbi, type);
  3560. if (err)
  3561. return err;
  3562. }
  3563. /* sanity check for summary blocks */
  3564. if (nats_in_cursum(nat_j) > NAT_JOURNAL_ENTRIES ||
  3565. sits_in_cursum(sit_j) > SIT_JOURNAL_ENTRIES) {
  3566. f2fs_err(sbi, "invalid journal entries nats %u sits %u",
  3567. nats_in_cursum(nat_j), sits_in_cursum(sit_j));
  3568. return -EINVAL;
  3569. }
  3570. return 0;
  3571. }
  3572. static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr)
  3573. {
  3574. struct page *page;
  3575. unsigned char *kaddr;
  3576. struct f2fs_summary *summary;
  3577. struct curseg_info *seg_i;
  3578. int written_size = 0;
  3579. int i, j;
  3580. page = f2fs_grab_meta_page(sbi, blkaddr++);
  3581. kaddr = (unsigned char *)page_address(page);
  3582. memset(kaddr, 0, PAGE_SIZE);
  3583. /* Step 1: write nat cache */
  3584. seg_i = CURSEG_I(sbi, CURSEG_HOT_DATA);
  3585. memcpy(kaddr, seg_i->journal, SUM_JOURNAL_SIZE);
  3586. written_size += SUM_JOURNAL_SIZE;
  3587. /* Step 2: write sit cache */
  3588. seg_i = CURSEG_I(sbi, CURSEG_COLD_DATA);
  3589. memcpy(kaddr + written_size, seg_i->journal, SUM_JOURNAL_SIZE);
  3590. written_size += SUM_JOURNAL_SIZE;
  3591. /* Step 3: write summary entries */
  3592. for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
  3593. seg_i = CURSEG_I(sbi, i);
  3594. for (j = 0; j < f2fs_curseg_valid_blocks(sbi, i); j++) {
  3595. if (!page) {
  3596. page = f2fs_grab_meta_page(sbi, blkaddr++);
  3597. kaddr = (unsigned char *)page_address(page);
  3598. memset(kaddr, 0, PAGE_SIZE);
  3599. written_size = 0;
  3600. }
  3601. summary = (struct f2fs_summary *)(kaddr + written_size);
  3602. *summary = seg_i->sum_blk->entries[j];
  3603. written_size += SUMMARY_SIZE;
  3604. if (written_size + SUMMARY_SIZE <= PAGE_SIZE -
  3605. SUM_FOOTER_SIZE)
  3606. continue;
  3607. set_page_dirty(page);
  3608. f2fs_put_page(page, 1);
  3609. page = NULL;
  3610. }
  3611. }
  3612. if (page) {
  3613. set_page_dirty(page);
  3614. f2fs_put_page(page, 1);
  3615. }
  3616. }
  3617. static void write_normal_summaries(struct f2fs_sb_info *sbi,
  3618. block_t blkaddr, int type)
  3619. {
  3620. int i, end;
  3621. if (IS_DATASEG(type))
  3622. end = type + NR_CURSEG_DATA_TYPE;
  3623. else
  3624. end = type + NR_CURSEG_NODE_TYPE;
  3625. for (i = type; i < end; i++)
  3626. write_current_sum_page(sbi, i, blkaddr + (i - type));
  3627. }
  3628. void f2fs_write_data_summaries(struct f2fs_sb_info *sbi, block_t start_blk)
  3629. {
  3630. if (is_set_ckpt_flags(sbi, CP_COMPACT_SUM_FLAG))
  3631. write_compacted_summaries(sbi, start_blk);
  3632. else
  3633. write_normal_summaries(sbi, start_blk, CURSEG_HOT_DATA);
  3634. }
  3635. void f2fs_write_node_summaries(struct f2fs_sb_info *sbi, block_t start_blk)
  3636. {
  3637. write_normal_summaries(sbi, start_blk, CURSEG_HOT_NODE);
  3638. }
  3639. int f2fs_lookup_journal_in_cursum(struct f2fs_journal *journal, int type,
  3640. unsigned int val, int alloc)
  3641. {
  3642. int i;
  3643. if (type == NAT_JOURNAL) {
  3644. for (i = 0; i < nats_in_cursum(journal); i++) {
  3645. if (le32_to_cpu(nid_in_journal(journal, i)) == val)
  3646. return i;
  3647. }
  3648. if (alloc && __has_cursum_space(journal, 1, NAT_JOURNAL))
  3649. return update_nats_in_cursum(journal, 1);
  3650. } else if (type == SIT_JOURNAL) {
  3651. for (i = 0; i < sits_in_cursum(journal); i++)
  3652. if (le32_to_cpu(segno_in_journal(journal, i)) == val)
  3653. return i;
  3654. if (alloc && __has_cursum_space(journal, 1, SIT_JOURNAL))
  3655. return update_sits_in_cursum(journal, 1);
  3656. }
  3657. return -1;
  3658. }
  3659. static struct page *get_current_sit_page(struct f2fs_sb_info *sbi,
  3660. unsigned int segno)
  3661. {
  3662. return f2fs_get_meta_page(sbi, current_sit_addr(sbi, segno));
  3663. }
  3664. static struct page *get_next_sit_page(struct f2fs_sb_info *sbi,
  3665. unsigned int start)
  3666. {
  3667. struct sit_info *sit_i = SIT_I(sbi);
  3668. struct page *page;
  3669. pgoff_t src_off, dst_off;
  3670. src_off = current_sit_addr(sbi, start);
  3671. dst_off = next_sit_addr(sbi, src_off);
  3672. page = f2fs_grab_meta_page(sbi, dst_off);
  3673. seg_info_to_sit_page(sbi, page, start);
  3674. set_page_dirty(page);
  3675. set_to_next_sit(sit_i, start);
  3676. return page;
  3677. }
  3678. static struct sit_entry_set *grab_sit_entry_set(void)
  3679. {
  3680. struct sit_entry_set *ses =
  3681. f2fs_kmem_cache_alloc(sit_entry_set_slab,
  3682. GFP_NOFS, true, NULL);
  3683. ses->entry_cnt = 0;
  3684. INIT_LIST_HEAD(&ses->set_list);
  3685. return ses;
  3686. }
  3687. static void release_sit_entry_set(struct sit_entry_set *ses)
  3688. {
  3689. list_del(&ses->set_list);
  3690. kmem_cache_free(sit_entry_set_slab, ses);
  3691. }
  3692. static void adjust_sit_entry_set(struct sit_entry_set *ses,
  3693. struct list_head *head)
  3694. {
  3695. struct sit_entry_set *next = ses;
  3696. if (list_is_last(&ses->set_list, head))
  3697. return;
  3698. list_for_each_entry_continue(next, head, set_list)
  3699. if (ses->entry_cnt <= next->entry_cnt) {
  3700. list_move_tail(&ses->set_list, &next->set_list);
  3701. return;
  3702. }
  3703. list_move_tail(&ses->set_list, head);
  3704. }
  3705. static void add_sit_entry(unsigned int segno, struct list_head *head)
  3706. {
  3707. struct sit_entry_set *ses;
  3708. unsigned int start_segno = START_SEGNO(segno);
  3709. list_for_each_entry(ses, head, set_list) {
  3710. if (ses->start_segno == start_segno) {
  3711. ses->entry_cnt++;
  3712. adjust_sit_entry_set(ses, head);
  3713. return;
  3714. }
  3715. }
  3716. ses = grab_sit_entry_set();
  3717. ses->start_segno = start_segno;
  3718. ses->entry_cnt++;
  3719. list_add(&ses->set_list, head);
  3720. }
  3721. static void add_sits_in_set(struct f2fs_sb_info *sbi)
  3722. {
  3723. struct f2fs_sm_info *sm_info = SM_I(sbi);
  3724. struct list_head *set_list = &sm_info->sit_entry_set;
  3725. unsigned long *bitmap = SIT_I(sbi)->dirty_sentries_bitmap;
  3726. unsigned int segno;
  3727. for_each_set_bit(segno, bitmap, MAIN_SEGS(sbi))
  3728. add_sit_entry(segno, set_list);
  3729. }
  3730. static void remove_sits_in_journal(struct f2fs_sb_info *sbi)
  3731. {
  3732. struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_COLD_DATA);
  3733. struct f2fs_journal *journal = curseg->journal;
  3734. int i;
  3735. down_write(&curseg->journal_rwsem);
  3736. for (i = 0; i < sits_in_cursum(journal); i++) {
  3737. unsigned int segno;
  3738. bool dirtied;
  3739. segno = le32_to_cpu(segno_in_journal(journal, i));
  3740. dirtied = __mark_sit_entry_dirty(sbi, segno);
  3741. if (!dirtied)
  3742. add_sit_entry(segno, &SM_I(sbi)->sit_entry_set);
  3743. }
  3744. update_sits_in_cursum(journal, -i);
  3745. up_write(&curseg->journal_rwsem);
  3746. }
  3747. /*
  3748. * CP calls this function, which flushes SIT entries including sit_journal,
  3749. * and moves prefree segs to free segs.
  3750. */
  3751. void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc)
  3752. {
  3753. struct sit_info *sit_i = SIT_I(sbi);
  3754. unsigned long *bitmap = sit_i->dirty_sentries_bitmap;
  3755. struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_COLD_DATA);
  3756. struct f2fs_journal *journal = curseg->journal;
  3757. struct sit_entry_set *ses, *tmp;
  3758. struct list_head *head = &SM_I(sbi)->sit_entry_set;
  3759. bool to_journal = !is_sbi_flag_set(sbi, SBI_IS_RESIZEFS);
  3760. struct seg_entry *se;
  3761. down_write(&sit_i->sentry_lock);
  3762. if (!sit_i->dirty_sentries)
  3763. goto out;
  3764. /*
  3765. * add and account sit entries of dirty bitmap in sit entry
  3766. * set temporarily
  3767. */
  3768. add_sits_in_set(sbi);
  3769. /*
  3770. * if there are no enough space in journal to store dirty sit
  3771. * entries, remove all entries from journal and add and account
  3772. * them in sit entry set.
  3773. */
  3774. if (!__has_cursum_space(journal, sit_i->dirty_sentries, SIT_JOURNAL) ||
  3775. !to_journal)
  3776. remove_sits_in_journal(sbi);
  3777. /*
  3778. * there are two steps to flush sit entries:
  3779. * #1, flush sit entries to journal in current cold data summary block.
  3780. * #2, flush sit entries to sit page.
  3781. */
  3782. list_for_each_entry_safe(ses, tmp, head, set_list) {
  3783. struct page *page = NULL;
  3784. struct f2fs_sit_block *raw_sit = NULL;
  3785. unsigned int start_segno = ses->start_segno;
  3786. unsigned int end = min(start_segno + SIT_ENTRY_PER_BLOCK,
  3787. (unsigned long)MAIN_SEGS(sbi));
  3788. unsigned int segno = start_segno;
  3789. if (to_journal &&
  3790. !__has_cursum_space(journal, ses->entry_cnt, SIT_JOURNAL))
  3791. to_journal = false;
  3792. if (to_journal) {
  3793. down_write(&curseg->journal_rwsem);
  3794. } else {
  3795. page = get_next_sit_page(sbi, start_segno);
  3796. raw_sit = page_address(page);
  3797. }
  3798. /* flush dirty sit entries in region of current sit set */
  3799. for_each_set_bit_from(segno, bitmap, end) {
  3800. int offset, sit_offset;
  3801. se = get_seg_entry(sbi, segno);
  3802. #ifdef CONFIG_F2FS_CHECK_FS
  3803. if (memcmp(se->cur_valid_map, se->cur_valid_map_mir,
  3804. SIT_VBLOCK_MAP_SIZE))
  3805. f2fs_bug_on(sbi, 1);
  3806. #endif
  3807. /* add discard candidates */
  3808. if (!(cpc->reason & CP_DISCARD)) {
  3809. cpc->trim_start = segno;
  3810. add_discard_addrs(sbi, cpc, false);
  3811. }
  3812. if (to_journal) {
  3813. offset = f2fs_lookup_journal_in_cursum(journal,
  3814. SIT_JOURNAL, segno, 1);
  3815. f2fs_bug_on(sbi, offset < 0);
  3816. segno_in_journal(journal, offset) =
  3817. cpu_to_le32(segno);
  3818. seg_info_to_raw_sit(se,
  3819. &sit_in_journal(journal, offset));
  3820. check_block_count(sbi, segno,
  3821. &sit_in_journal(journal, offset));
  3822. } else {
  3823. sit_offset = SIT_ENTRY_OFFSET(sit_i, segno);
  3824. seg_info_to_raw_sit(se,
  3825. &raw_sit->entries[sit_offset]);
  3826. check_block_count(sbi, segno,
  3827. &raw_sit->entries[sit_offset]);
  3828. }
  3829. __clear_bit(segno, bitmap);
  3830. sit_i->dirty_sentries--;
  3831. ses->entry_cnt--;
  3832. }
  3833. if (to_journal)
  3834. up_write(&curseg->journal_rwsem);
  3835. else
  3836. f2fs_put_page(page, 1);
  3837. f2fs_bug_on(sbi, ses->entry_cnt);
  3838. release_sit_entry_set(ses);
  3839. }
  3840. f2fs_bug_on(sbi, !list_empty(head));
  3841. f2fs_bug_on(sbi, sit_i->dirty_sentries);
  3842. out:
  3843. if (cpc->reason & CP_DISCARD) {
  3844. __u64 trim_start = cpc->trim_start;
  3845. for (; cpc->trim_start <= cpc->trim_end; cpc->trim_start++)
  3846. add_discard_addrs(sbi, cpc, false);
  3847. cpc->trim_start = trim_start;
  3848. }
  3849. up_write(&sit_i->sentry_lock);
  3850. set_prefree_as_free_segments(sbi);
  3851. }
  3852. static int build_sit_info(struct f2fs_sb_info *sbi)
  3853. {
  3854. struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
  3855. struct sit_info *sit_i;
  3856. unsigned int sit_segs, start;
  3857. char *src_bitmap, *bitmap;
  3858. unsigned int bitmap_size, main_bitmap_size, sit_bitmap_size;
  3859. unsigned int discard_map = f2fs_block_unit_discard(sbi) ? 1 : 0;
  3860. /* allocate memory for SIT information */
  3861. sit_i = f2fs_kzalloc(sbi, sizeof(struct sit_info), GFP_KERNEL);
  3862. if (!sit_i)
  3863. return -ENOMEM;
  3864. SM_I(sbi)->sit_info = sit_i;
  3865. sit_i->sentries =
  3866. f2fs_kvzalloc(sbi, array_size(sizeof(struct seg_entry),
  3867. MAIN_SEGS(sbi)),
  3868. GFP_KERNEL);
  3869. if (!sit_i->sentries)
  3870. return -ENOMEM;
  3871. main_bitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));
  3872. sit_i->dirty_sentries_bitmap = f2fs_kvzalloc(sbi, main_bitmap_size,
  3873. GFP_KERNEL);
  3874. if (!sit_i->dirty_sentries_bitmap)
  3875. return -ENOMEM;
  3876. #ifdef CONFIG_F2FS_CHECK_FS
  3877. bitmap_size = MAIN_SEGS(sbi) * SIT_VBLOCK_MAP_SIZE * (3 + discard_map);
  3878. #else
  3879. bitmap_size = MAIN_SEGS(sbi) * SIT_VBLOCK_MAP_SIZE * (2 + discard_map);
  3880. #endif
  3881. sit_i->bitmap = f2fs_kvzalloc(sbi, bitmap_size, GFP_KERNEL);
  3882. if (!sit_i->bitmap)
  3883. return -ENOMEM;
  3884. bitmap = sit_i->bitmap;
  3885. for (start = 0; start < MAIN_SEGS(sbi); start++) {
  3886. sit_i->sentries[start].cur_valid_map = bitmap;
  3887. bitmap += SIT_VBLOCK_MAP_SIZE;
  3888. sit_i->sentries[start].ckpt_valid_map = bitmap;
  3889. bitmap += SIT_VBLOCK_MAP_SIZE;
  3890. #ifdef CONFIG_F2FS_CHECK_FS
  3891. sit_i->sentries[start].cur_valid_map_mir = bitmap;
  3892. bitmap += SIT_VBLOCK_MAP_SIZE;
  3893. #endif
  3894. if (discard_map) {
  3895. sit_i->sentries[start].discard_map = bitmap;
  3896. bitmap += SIT_VBLOCK_MAP_SIZE;
  3897. }
  3898. }
  3899. sit_i->tmp_map = f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
  3900. if (!sit_i->tmp_map)
  3901. return -ENOMEM;
  3902. if (__is_large_section(sbi)) {
  3903. sit_i->sec_entries =
  3904. f2fs_kvzalloc(sbi, array_size(sizeof(struct sec_entry),
  3905. MAIN_SECS(sbi)),
  3906. GFP_KERNEL);
  3907. if (!sit_i->sec_entries)
  3908. return -ENOMEM;
  3909. }
  3910. /* get information related with SIT */
  3911. sit_segs = le32_to_cpu(raw_super->segment_count_sit) >> 1;
  3912. /* setup SIT bitmap from ckeckpoint pack */
  3913. sit_bitmap_size = __bitmap_size(sbi, SIT_BITMAP);
  3914. src_bitmap = __bitmap_ptr(sbi, SIT_BITMAP);
  3915. sit_i->sit_bitmap = kmemdup(src_bitmap, sit_bitmap_size, GFP_KERNEL);
  3916. if (!sit_i->sit_bitmap)
  3917. return -ENOMEM;
  3918. #ifdef CONFIG_F2FS_CHECK_FS
  3919. sit_i->sit_bitmap_mir = kmemdup(src_bitmap,
  3920. sit_bitmap_size, GFP_KERNEL);
  3921. if (!sit_i->sit_bitmap_mir)
  3922. return -ENOMEM;
  3923. sit_i->invalid_segmap = f2fs_kvzalloc(sbi,
  3924. main_bitmap_size, GFP_KERNEL);
  3925. if (!sit_i->invalid_segmap)
  3926. return -ENOMEM;
  3927. #endif
  3928. sit_i->sit_base_addr = le32_to_cpu(raw_super->sit_blkaddr);
  3929. sit_i->sit_blocks = SEGS_TO_BLKS(sbi, sit_segs);
  3930. sit_i->written_valid_blocks = 0;
  3931. sit_i->bitmap_size = sit_bitmap_size;
  3932. sit_i->dirty_sentries = 0;
  3933. sit_i->sents_per_block = SIT_ENTRY_PER_BLOCK;
  3934. sit_i->elapsed_time = le64_to_cpu(sbi->ckpt->elapsed_time);
  3935. sit_i->mounted_time = ktime_get_boottime_seconds();
  3936. init_rwsem(&sit_i->sentry_lock);
  3937. return 0;
  3938. }
  3939. static int build_free_segmap(struct f2fs_sb_info *sbi)
  3940. {
  3941. struct free_segmap_info *free_i;
  3942. unsigned int bitmap_size, sec_bitmap_size;
  3943. /* allocate memory for free segmap information */
  3944. free_i = f2fs_kzalloc(sbi, sizeof(struct free_segmap_info), GFP_KERNEL);
  3945. if (!free_i)
  3946. return -ENOMEM;
  3947. SM_I(sbi)->free_info = free_i;
  3948. bitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));
  3949. free_i->free_segmap = f2fs_kvmalloc(sbi, bitmap_size, GFP_KERNEL);
  3950. if (!free_i->free_segmap)
  3951. return -ENOMEM;
  3952. sec_bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));
  3953. free_i->free_secmap = f2fs_kvmalloc(sbi, sec_bitmap_size, GFP_KERNEL);
  3954. if (!free_i->free_secmap)
  3955. return -ENOMEM;
  3956. /* set all segments as dirty temporarily */
  3957. memset(free_i->free_segmap, 0xff, bitmap_size);
  3958. memset(free_i->free_secmap, 0xff, sec_bitmap_size);
  3959. /* init free segmap information */
  3960. free_i->start_segno = GET_SEGNO_FROM_SEG0(sbi, MAIN_BLKADDR(sbi));
  3961. free_i->free_segments = 0;
  3962. free_i->free_sections = 0;
  3963. spin_lock_init(&free_i->segmap_lock);
  3964. return 0;
  3965. }
  3966. static int build_curseg(struct f2fs_sb_info *sbi)
  3967. {
  3968. struct curseg_info *array;
  3969. int i;
  3970. array = f2fs_kzalloc(sbi, array_size(NR_CURSEG_TYPE,
  3971. sizeof(*array)), GFP_KERNEL);
  3972. if (!array)
  3973. return -ENOMEM;
  3974. SM_I(sbi)->curseg_array = array;
  3975. for (i = 0; i < NO_CHECK_TYPE; i++) {
  3976. mutex_init(&array[i].curseg_mutex);
  3977. array[i].sum_blk = f2fs_kzalloc(sbi, PAGE_SIZE, GFP_KERNEL);
  3978. if (!array[i].sum_blk)
  3979. return -ENOMEM;
  3980. init_rwsem(&array[i].journal_rwsem);
  3981. array[i].journal = f2fs_kzalloc(sbi,
  3982. sizeof(struct f2fs_journal), GFP_KERNEL);
  3983. if (!array[i].journal)
  3984. return -ENOMEM;
  3985. if (i < NR_PERSISTENT_LOG)
  3986. array[i].seg_type = CURSEG_HOT_DATA + i;
  3987. else if (i == CURSEG_COLD_DATA_PINNED)
  3988. array[i].seg_type = CURSEG_COLD_DATA;
  3989. else if (i == CURSEG_ALL_DATA_ATGC)
  3990. array[i].seg_type = CURSEG_COLD_DATA;
  3991. reset_curseg_fields(&array[i]);
  3992. }
  3993. return restore_curseg_summaries(sbi);
  3994. }
  3995. static int build_sit_entries(struct f2fs_sb_info *sbi)
  3996. {
  3997. struct sit_info *sit_i = SIT_I(sbi);
  3998. struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_COLD_DATA);
  3999. struct f2fs_journal *journal = curseg->journal;
  4000. struct seg_entry *se;
  4001. struct f2fs_sit_entry sit;
  4002. int sit_blk_cnt = SIT_BLK_CNT(sbi);
  4003. unsigned int i, start, end;
  4004. unsigned int readed, start_blk = 0;
  4005. int err = 0;
  4006. block_t sit_valid_blocks[2] = {0, 0};
  4007. do {
  4008. readed = f2fs_ra_meta_pages(sbi, start_blk, BIO_MAX_VECS,
  4009. META_SIT, true);
  4010. start = start_blk * sit_i->sents_per_block;
  4011. end = (start_blk + readed) * sit_i->sents_per_block;
  4012. for (; start < end && start < MAIN_SEGS(sbi); start++) {
  4013. struct f2fs_sit_block *sit_blk;
  4014. struct page *page;
  4015. se = &sit_i->sentries[start];
  4016. page = get_current_sit_page(sbi, start);
  4017. if (IS_ERR(page))
  4018. return PTR_ERR(page);
  4019. sit_blk = (struct f2fs_sit_block *)page_address(page);
  4020. sit = sit_blk->entries[SIT_ENTRY_OFFSET(sit_i, start)];
  4021. f2fs_put_page(page, 1);
  4022. err = check_block_count(sbi, start, &sit);
  4023. if (err)
  4024. return err;
  4025. seg_info_from_raw_sit(se, &sit);
  4026. if (se->type >= NR_PERSISTENT_LOG) {
  4027. f2fs_err(sbi, "Invalid segment type: %u, segno: %u",
  4028. se->type, start);
  4029. f2fs_handle_error(sbi,
  4030. ERROR_INCONSISTENT_SUM_TYPE);
  4031. return -EFSCORRUPTED;
  4032. }
  4033. sit_valid_blocks[SE_PAGETYPE(se)] += se->valid_blocks;
  4034. if (!f2fs_block_unit_discard(sbi))
  4035. goto init_discard_map_done;
  4036. /* build discard map only one time */
  4037. if (is_set_ckpt_flags(sbi, CP_TRIMMED_FLAG)) {
  4038. memset(se->discard_map, 0xff,
  4039. SIT_VBLOCK_MAP_SIZE);
  4040. goto init_discard_map_done;
  4041. }
  4042. memcpy(se->discard_map, se->cur_valid_map,
  4043. SIT_VBLOCK_MAP_SIZE);
  4044. sbi->discard_blks += BLKS_PER_SEG(sbi) -
  4045. se->valid_blocks;
  4046. init_discard_map_done:
  4047. if (__is_large_section(sbi))
  4048. get_sec_entry(sbi, start)->valid_blocks +=
  4049. se->valid_blocks;
  4050. }
  4051. start_blk += readed;
  4052. } while (start_blk < sit_blk_cnt);
  4053. down_read(&curseg->journal_rwsem);
  4054. for (i = 0; i < sits_in_cursum(journal); i++) {
  4055. unsigned int old_valid_blocks;
  4056. start = le32_to_cpu(segno_in_journal(journal, i));
  4057. if (start >= MAIN_SEGS(sbi)) {
  4058. f2fs_err(sbi, "Wrong journal entry on segno %u",
  4059. start);
  4060. err = -EFSCORRUPTED;
  4061. f2fs_handle_error(sbi, ERROR_CORRUPTED_JOURNAL);
  4062. break;
  4063. }
  4064. se = &sit_i->sentries[start];
  4065. sit = sit_in_journal(journal, i);
  4066. old_valid_blocks = se->valid_blocks;
  4067. sit_valid_blocks[SE_PAGETYPE(se)] -= old_valid_blocks;
  4068. err = check_block_count(sbi, start, &sit);
  4069. if (err)
  4070. break;
  4071. seg_info_from_raw_sit(se, &sit);
  4072. if (se->type >= NR_PERSISTENT_LOG) {
  4073. f2fs_err(sbi, "Invalid segment type: %u, segno: %u",
  4074. se->type, start);
  4075. err = -EFSCORRUPTED;
  4076. f2fs_handle_error(sbi, ERROR_INCONSISTENT_SUM_TYPE);
  4077. break;
  4078. }
  4079. sit_valid_blocks[SE_PAGETYPE(se)] += se->valid_blocks;
  4080. if (f2fs_block_unit_discard(sbi)) {
  4081. if (is_set_ckpt_flags(sbi, CP_TRIMMED_FLAG)) {
  4082. memset(se->discard_map, 0xff, SIT_VBLOCK_MAP_SIZE);
  4083. } else {
  4084. memcpy(se->discard_map, se->cur_valid_map,
  4085. SIT_VBLOCK_MAP_SIZE);
  4086. sbi->discard_blks += old_valid_blocks;
  4087. sbi->discard_blks -= se->valid_blocks;
  4088. }
  4089. }
  4090. if (__is_large_section(sbi)) {
  4091. get_sec_entry(sbi, start)->valid_blocks +=
  4092. se->valid_blocks;
  4093. get_sec_entry(sbi, start)->valid_blocks -=
  4094. old_valid_blocks;
  4095. }
  4096. }
  4097. up_read(&curseg->journal_rwsem);
  4098. if (err)
  4099. return err;
  4100. if (sit_valid_blocks[NODE] != valid_node_count(sbi)) {
  4101. f2fs_err(sbi, "SIT is corrupted node# %u vs %u",
  4102. sit_valid_blocks[NODE], valid_node_count(sbi));
  4103. f2fs_handle_error(sbi, ERROR_INCONSISTENT_NODE_COUNT);
  4104. return -EFSCORRUPTED;
  4105. }
  4106. if (sit_valid_blocks[DATA] + sit_valid_blocks[NODE] >
  4107. valid_user_blocks(sbi)) {
  4108. f2fs_err(sbi, "SIT is corrupted data# %u %u vs %u",
  4109. sit_valid_blocks[DATA], sit_valid_blocks[NODE],
  4110. valid_user_blocks(sbi));
  4111. f2fs_handle_error(sbi, ERROR_INCONSISTENT_BLOCK_COUNT);
  4112. return -EFSCORRUPTED;
  4113. }
  4114. return 0;
  4115. }
  4116. static void init_free_segmap(struct f2fs_sb_info *sbi)
  4117. {
  4118. unsigned int start;
  4119. int type;
  4120. struct seg_entry *sentry;
  4121. for (start = 0; start < MAIN_SEGS(sbi); start++) {
  4122. if (f2fs_usable_blks_in_seg(sbi, start) == 0)
  4123. continue;
  4124. sentry = get_seg_entry(sbi, start);
  4125. if (!sentry->valid_blocks)
  4126. __set_free(sbi, start);
  4127. else
  4128. SIT_I(sbi)->written_valid_blocks +=
  4129. sentry->valid_blocks;
  4130. }
  4131. /* set use the current segments */
  4132. for (type = CURSEG_HOT_DATA; type <= CURSEG_COLD_NODE; type++) {
  4133. struct curseg_info *curseg_t = CURSEG_I(sbi, type);
  4134. __set_test_and_inuse(sbi, curseg_t->segno);
  4135. }
  4136. }
  4137. static void init_dirty_segmap(struct f2fs_sb_info *sbi)
  4138. {
  4139. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  4140. struct free_segmap_info *free_i = FREE_I(sbi);
  4141. unsigned int segno = 0, offset = 0, secno;
  4142. block_t valid_blocks, usable_blks_in_seg;
  4143. while (1) {
  4144. /* find dirty segment based on free segmap */
  4145. segno = find_next_inuse(free_i, MAIN_SEGS(sbi), offset);
  4146. if (segno >= MAIN_SEGS(sbi))
  4147. break;
  4148. offset = segno + 1;
  4149. valid_blocks = get_valid_blocks(sbi, segno, false);
  4150. usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
  4151. if (valid_blocks == usable_blks_in_seg || !valid_blocks)
  4152. continue;
  4153. if (valid_blocks > usable_blks_in_seg) {
  4154. f2fs_bug_on(sbi, 1);
  4155. continue;
  4156. }
  4157. mutex_lock(&dirty_i->seglist_lock);
  4158. __locate_dirty_segment(sbi, segno, DIRTY);
  4159. mutex_unlock(&dirty_i->seglist_lock);
  4160. }
  4161. if (!__is_large_section(sbi))
  4162. return;
  4163. mutex_lock(&dirty_i->seglist_lock);
  4164. for (segno = 0; segno < MAIN_SEGS(sbi); segno += SEGS_PER_SEC(sbi)) {
  4165. valid_blocks = get_valid_blocks(sbi, segno, true);
  4166. secno = GET_SEC_FROM_SEG(sbi, segno);
  4167. if (!valid_blocks || valid_blocks == CAP_BLKS_PER_SEC(sbi))
  4168. continue;
  4169. if (IS_CURSEC(sbi, secno))
  4170. continue;
  4171. set_bit(secno, dirty_i->dirty_secmap);
  4172. }
  4173. mutex_unlock(&dirty_i->seglist_lock);
  4174. }
  4175. static int init_victim_secmap(struct f2fs_sb_info *sbi)
  4176. {
  4177. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  4178. unsigned int bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));
  4179. dirty_i->victim_secmap = f2fs_kvzalloc(sbi, bitmap_size, GFP_KERNEL);
  4180. if (!dirty_i->victim_secmap)
  4181. return -ENOMEM;
  4182. dirty_i->pinned_secmap = f2fs_kvzalloc(sbi, bitmap_size, GFP_KERNEL);
  4183. if (!dirty_i->pinned_secmap)
  4184. return -ENOMEM;
  4185. dirty_i->pinned_secmap_cnt = 0;
  4186. dirty_i->enable_pin_section = true;
  4187. return 0;
  4188. }
  4189. static int build_dirty_segmap(struct f2fs_sb_info *sbi)
  4190. {
  4191. struct dirty_seglist_info *dirty_i;
  4192. unsigned int bitmap_size, i;
  4193. /* allocate memory for dirty segments list information */
  4194. dirty_i = f2fs_kzalloc(sbi, sizeof(struct dirty_seglist_info),
  4195. GFP_KERNEL);
  4196. if (!dirty_i)
  4197. return -ENOMEM;
  4198. SM_I(sbi)->dirty_info = dirty_i;
  4199. mutex_init(&dirty_i->seglist_lock);
  4200. bitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));
  4201. for (i = 0; i < NR_DIRTY_TYPE; i++) {
  4202. dirty_i->dirty_segmap[i] = f2fs_kvzalloc(sbi, bitmap_size,
  4203. GFP_KERNEL);
  4204. if (!dirty_i->dirty_segmap[i])
  4205. return -ENOMEM;
  4206. }
  4207. if (__is_large_section(sbi)) {
  4208. bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));
  4209. dirty_i->dirty_secmap = f2fs_kvzalloc(sbi,
  4210. bitmap_size, GFP_KERNEL);
  4211. if (!dirty_i->dirty_secmap)
  4212. return -ENOMEM;
  4213. }
  4214. init_dirty_segmap(sbi);
  4215. return init_victim_secmap(sbi);
  4216. }
  4217. static int sanity_check_curseg(struct f2fs_sb_info *sbi)
  4218. {
  4219. int i;
  4220. /*
  4221. * In LFS/SSR curseg, .next_blkoff should point to an unused blkaddr;
  4222. * In LFS curseg, all blkaddr after .next_blkoff should be unused.
  4223. */
  4224. for (i = 0; i < NR_PERSISTENT_LOG; i++) {
  4225. struct curseg_info *curseg = CURSEG_I(sbi, i);
  4226. struct seg_entry *se = get_seg_entry(sbi, curseg->segno);
  4227. unsigned int blkofs = curseg->next_blkoff;
  4228. if (f2fs_sb_has_readonly(sbi) &&
  4229. i != CURSEG_HOT_DATA && i != CURSEG_HOT_NODE)
  4230. continue;
  4231. sanity_check_seg_type(sbi, curseg->seg_type);
  4232. if (curseg->alloc_type != LFS && curseg->alloc_type != SSR) {
  4233. f2fs_err(sbi,
  4234. "Current segment has invalid alloc_type:%d",
  4235. curseg->alloc_type);
  4236. f2fs_handle_error(sbi, ERROR_INVALID_CURSEG);
  4237. return -EFSCORRUPTED;
  4238. }
  4239. if (f2fs_test_bit(blkofs, se->cur_valid_map))
  4240. goto out;
  4241. if (curseg->alloc_type == SSR)
  4242. continue;
  4243. for (blkofs += 1; blkofs < BLKS_PER_SEG(sbi); blkofs++) {
  4244. if (!f2fs_test_bit(blkofs, se->cur_valid_map))
  4245. continue;
  4246. out:
  4247. f2fs_err(sbi,
  4248. "Current segment's next free block offset is inconsistent with bitmap, logtype:%u, segno:%u, type:%u, next_blkoff:%u, blkofs:%u",
  4249. i, curseg->segno, curseg->alloc_type,
  4250. curseg->next_blkoff, blkofs);
  4251. f2fs_handle_error(sbi, ERROR_INVALID_CURSEG);
  4252. return -EFSCORRUPTED;
  4253. }
  4254. }
  4255. return 0;
  4256. }
  4257. #ifdef CONFIG_BLK_DEV_ZONED
  4258. static int check_zone_write_pointer(struct f2fs_sb_info *sbi,
  4259. struct f2fs_dev_info *fdev,
  4260. struct blk_zone *zone)
  4261. {
  4262. unsigned int zone_segno;
  4263. block_t zone_block, valid_block_cnt;
  4264. unsigned int log_sectors_per_block = sbi->log_blocksize - SECTOR_SHIFT;
  4265. int ret;
  4266. unsigned int nofs_flags;
  4267. if (zone->type != BLK_ZONE_TYPE_SEQWRITE_REQ)
  4268. return 0;
  4269. zone_block = fdev->start_blk + (zone->start >> log_sectors_per_block);
  4270. zone_segno = GET_SEGNO(sbi, zone_block);
  4271. /*
  4272. * Skip check of zones cursegs point to, since
  4273. * fix_curseg_write_pointer() checks them.
  4274. */
  4275. if (zone_segno >= MAIN_SEGS(sbi))
  4276. return 0;
  4277. /*
  4278. * Get # of valid block of the zone.
  4279. */
  4280. valid_block_cnt = get_valid_blocks(sbi, zone_segno, true);
  4281. if (IS_CURSEC(sbi, GET_SEC_FROM_SEG(sbi, zone_segno))) {
  4282. f2fs_notice(sbi, "Open zones: valid block[0x%x,0x%x] cond[%s]",
  4283. zone_segno, valid_block_cnt,
  4284. blk_zone_cond_str(zone->cond));
  4285. return 0;
  4286. }
  4287. if ((!valid_block_cnt && zone->cond == BLK_ZONE_COND_EMPTY) ||
  4288. (valid_block_cnt && zone->cond == BLK_ZONE_COND_FULL))
  4289. return 0;
  4290. if (!valid_block_cnt) {
  4291. f2fs_notice(sbi, "Zone without valid block has non-zero write "
  4292. "pointer. Reset the write pointer: cond[%s]",
  4293. blk_zone_cond_str(zone->cond));
  4294. ret = __f2fs_issue_discard_zone(sbi, fdev->bdev, zone_block,
  4295. zone->len >> log_sectors_per_block);
  4296. if (ret)
  4297. f2fs_err(sbi, "Discard zone failed: %s (errno=%d)",
  4298. fdev->path, ret);
  4299. return ret;
  4300. }
  4301. /*
  4302. * If there are valid blocks and the write pointer doesn't match
  4303. * with them, we need to report the inconsistency and fill
  4304. * the zone till the end to close the zone. This inconsistency
  4305. * does not cause write error because the zone will not be
  4306. * selected for write operation until it get discarded.
  4307. */
  4308. f2fs_notice(sbi, "Valid blocks are not aligned with write "
  4309. "pointer: valid block[0x%x,0x%x] cond[%s]",
  4310. zone_segno, valid_block_cnt, blk_zone_cond_str(zone->cond));
  4311. nofs_flags = memalloc_nofs_save();
  4312. ret = blkdev_zone_mgmt(fdev->bdev, REQ_OP_ZONE_FINISH,
  4313. zone->start, zone->len);
  4314. memalloc_nofs_restore(nofs_flags);
  4315. if (ret == -EOPNOTSUPP) {
  4316. ret = blkdev_issue_zeroout(fdev->bdev, zone->wp,
  4317. zone->len - (zone->wp - zone->start),
  4318. GFP_NOFS, 0);
  4319. if (ret)
  4320. f2fs_err(sbi, "Fill up zone failed: %s (errno=%d)",
  4321. fdev->path, ret);
  4322. } else if (ret) {
  4323. f2fs_err(sbi, "Finishing zone failed: %s (errno=%d)",
  4324. fdev->path, ret);
  4325. }
  4326. return ret;
  4327. }
  4328. static struct f2fs_dev_info *get_target_zoned_dev(struct f2fs_sb_info *sbi,
  4329. block_t zone_blkaddr)
  4330. {
  4331. int i;
  4332. for (i = 0; i < sbi->s_ndevs; i++) {
  4333. if (!bdev_is_zoned(FDEV(i).bdev))
  4334. continue;
  4335. if (sbi->s_ndevs == 1 || (FDEV(i).start_blk <= zone_blkaddr &&
  4336. zone_blkaddr <= FDEV(i).end_blk))
  4337. return &FDEV(i);
  4338. }
  4339. return NULL;
  4340. }
  4341. static int report_one_zone_cb(struct blk_zone *zone, unsigned int idx,
  4342. void *data)
  4343. {
  4344. memcpy(data, zone, sizeof(struct blk_zone));
  4345. return 0;
  4346. }
  4347. static int fix_curseg_write_pointer(struct f2fs_sb_info *sbi, int type)
  4348. {
  4349. struct curseg_info *cs = CURSEG_I(sbi, type);
  4350. struct f2fs_dev_info *zbd;
  4351. struct blk_zone zone;
  4352. unsigned int cs_section, wp_segno, wp_blkoff, wp_sector_off;
  4353. block_t cs_zone_block, wp_block;
  4354. unsigned int log_sectors_per_block = sbi->log_blocksize - SECTOR_SHIFT;
  4355. sector_t zone_sector;
  4356. int err;
  4357. cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
  4358. cs_zone_block = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, cs_section));
  4359. zbd = get_target_zoned_dev(sbi, cs_zone_block);
  4360. if (!zbd)
  4361. return 0;
  4362. /* report zone for the sector the curseg points to */
  4363. zone_sector = (sector_t)(cs_zone_block - zbd->start_blk)
  4364. << log_sectors_per_block;
  4365. err = blkdev_report_zones(zbd->bdev, zone_sector, 1,
  4366. report_one_zone_cb, &zone);
  4367. if (err != 1) {
  4368. f2fs_err(sbi, "Report zone failed: %s errno=(%d)",
  4369. zbd->path, err);
  4370. return err;
  4371. }
  4372. if (zone.type != BLK_ZONE_TYPE_SEQWRITE_REQ)
  4373. return 0;
  4374. /*
  4375. * When safely unmounted in the previous mount, we could use current
  4376. * segments. Otherwise, allocate new sections.
  4377. */
  4378. if (is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
  4379. wp_block = zbd->start_blk + (zone.wp >> log_sectors_per_block);
  4380. wp_segno = GET_SEGNO(sbi, wp_block);
  4381. wp_blkoff = wp_block - START_BLOCK(sbi, wp_segno);
  4382. wp_sector_off = zone.wp & GENMASK(log_sectors_per_block - 1, 0);
  4383. if (cs->segno == wp_segno && cs->next_blkoff == wp_blkoff &&
  4384. wp_sector_off == 0)
  4385. return 0;
  4386. f2fs_notice(sbi, "Unaligned curseg[%d] with write pointer: "
  4387. "curseg[0x%x,0x%x] wp[0x%x,0x%x]", type, cs->segno,
  4388. cs->next_blkoff, wp_segno, wp_blkoff);
  4389. }
  4390. /* Allocate a new section if it's not new. */
  4391. if (cs->next_blkoff ||
  4392. cs->segno != GET_SEG_FROM_SEC(sbi, GET_ZONE_FROM_SEC(sbi, cs_section))) {
  4393. unsigned int old_segno = cs->segno, old_blkoff = cs->next_blkoff;
  4394. f2fs_allocate_new_section(sbi, type, true);
  4395. f2fs_notice(sbi, "Assign new section to curseg[%d]: "
  4396. "[0x%x,0x%x] -> [0x%x,0x%x]",
  4397. type, old_segno, old_blkoff,
  4398. cs->segno, cs->next_blkoff);
  4399. }
  4400. /* check consistency of the zone curseg pointed to */
  4401. if (check_zone_write_pointer(sbi, zbd, &zone))
  4402. return -EIO;
  4403. /* check newly assigned zone */
  4404. cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
  4405. cs_zone_block = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, cs_section));
  4406. zbd = get_target_zoned_dev(sbi, cs_zone_block);
  4407. if (!zbd)
  4408. return 0;
  4409. zone_sector = (sector_t)(cs_zone_block - zbd->start_blk)
  4410. << log_sectors_per_block;
  4411. err = blkdev_report_zones(zbd->bdev, zone_sector, 1,
  4412. report_one_zone_cb, &zone);
  4413. if (err != 1) {
  4414. f2fs_err(sbi, "Report zone failed: %s errno=(%d)",
  4415. zbd->path, err);
  4416. return err;
  4417. }
  4418. if (zone.type != BLK_ZONE_TYPE_SEQWRITE_REQ)
  4419. return 0;
  4420. if (zone.wp != zone.start) {
  4421. f2fs_notice(sbi,
  4422. "New zone for curseg[%d] is not yet discarded. "
  4423. "Reset the zone: curseg[0x%x,0x%x]",
  4424. type, cs->segno, cs->next_blkoff);
  4425. err = __f2fs_issue_discard_zone(sbi, zbd->bdev, cs_zone_block,
  4426. zone.len >> log_sectors_per_block);
  4427. if (err) {
  4428. f2fs_err(sbi, "Discard zone failed: %s (errno=%d)",
  4429. zbd->path, err);
  4430. return err;
  4431. }
  4432. }
  4433. return 0;
  4434. }
  4435. int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi)
  4436. {
  4437. int i, ret;
  4438. for (i = 0; i < NR_PERSISTENT_LOG; i++) {
  4439. ret = fix_curseg_write_pointer(sbi, i);
  4440. if (ret)
  4441. return ret;
  4442. }
  4443. return 0;
  4444. }
  4445. struct check_zone_write_pointer_args {
  4446. struct f2fs_sb_info *sbi;
  4447. struct f2fs_dev_info *fdev;
  4448. };
  4449. static int check_zone_write_pointer_cb(struct blk_zone *zone, unsigned int idx,
  4450. void *data)
  4451. {
  4452. struct check_zone_write_pointer_args *args;
  4453. args = (struct check_zone_write_pointer_args *)data;
  4454. return check_zone_write_pointer(args->sbi, args->fdev, zone);
  4455. }
  4456. int f2fs_check_write_pointer(struct f2fs_sb_info *sbi)
  4457. {
  4458. int i, ret;
  4459. struct check_zone_write_pointer_args args;
  4460. for (i = 0; i < sbi->s_ndevs; i++) {
  4461. if (!bdev_is_zoned(FDEV(i).bdev))
  4462. continue;
  4463. args.sbi = sbi;
  4464. args.fdev = &FDEV(i);
  4465. ret = blkdev_report_zones(FDEV(i).bdev, 0, BLK_ALL_ZONES,
  4466. check_zone_write_pointer_cb, &args);
  4467. if (ret < 0)
  4468. return ret;
  4469. }
  4470. return 0;
  4471. }
  4472. /*
  4473. * Return the number of usable blocks in a segment. The number of blocks
  4474. * returned is always equal to the number of blocks in a segment for
  4475. * segments fully contained within a sequential zone capacity or a
  4476. * conventional zone. For segments partially contained in a sequential
  4477. * zone capacity, the number of usable blocks up to the zone capacity
  4478. * is returned. 0 is returned in all other cases.
  4479. */
  4480. static inline unsigned int f2fs_usable_zone_blks_in_seg(
  4481. struct f2fs_sb_info *sbi, unsigned int segno)
  4482. {
  4483. block_t seg_start, sec_start_blkaddr, sec_cap_blkaddr;
  4484. unsigned int secno;
  4485. if (!sbi->unusable_blocks_per_sec)
  4486. return BLKS_PER_SEG(sbi);
  4487. secno = GET_SEC_FROM_SEG(sbi, segno);
  4488. seg_start = START_BLOCK(sbi, segno);
  4489. sec_start_blkaddr = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, secno));
  4490. sec_cap_blkaddr = sec_start_blkaddr + CAP_BLKS_PER_SEC(sbi);
  4491. /*
  4492. * If segment starts before zone capacity and spans beyond
  4493. * zone capacity, then usable blocks are from seg start to
  4494. * zone capacity. If the segment starts after the zone capacity,
  4495. * then there are no usable blocks.
  4496. */
  4497. if (seg_start >= sec_cap_blkaddr)
  4498. return 0;
  4499. if (seg_start + BLKS_PER_SEG(sbi) > sec_cap_blkaddr)
  4500. return sec_cap_blkaddr - seg_start;
  4501. return BLKS_PER_SEG(sbi);
  4502. }
  4503. #else
  4504. int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi)
  4505. {
  4506. return 0;
  4507. }
  4508. int f2fs_check_write_pointer(struct f2fs_sb_info *sbi)
  4509. {
  4510. return 0;
  4511. }
  4512. static inline unsigned int f2fs_usable_zone_blks_in_seg(struct f2fs_sb_info *sbi,
  4513. unsigned int segno)
  4514. {
  4515. return 0;
  4516. }
  4517. #endif
  4518. unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
  4519. unsigned int segno)
  4520. {
  4521. if (f2fs_sb_has_blkzoned(sbi))
  4522. return f2fs_usable_zone_blks_in_seg(sbi, segno);
  4523. return BLKS_PER_SEG(sbi);
  4524. }
  4525. unsigned int f2fs_usable_segs_in_sec(struct f2fs_sb_info *sbi)
  4526. {
  4527. if (f2fs_sb_has_blkzoned(sbi))
  4528. return CAP_SEGS_PER_SEC(sbi);
  4529. return SEGS_PER_SEC(sbi);
  4530. }
  4531. /*
  4532. * Update min, max modified time for cost-benefit GC algorithm
  4533. */
  4534. static void init_min_max_mtime(struct f2fs_sb_info *sbi)
  4535. {
  4536. struct sit_info *sit_i = SIT_I(sbi);
  4537. unsigned int segno;
  4538. down_write(&sit_i->sentry_lock);
  4539. sit_i->min_mtime = ULLONG_MAX;
  4540. for (segno = 0; segno < MAIN_SEGS(sbi); segno += SEGS_PER_SEC(sbi)) {
  4541. unsigned int i;
  4542. unsigned long long mtime = 0;
  4543. for (i = 0; i < SEGS_PER_SEC(sbi); i++)
  4544. mtime += get_seg_entry(sbi, segno + i)->mtime;
  4545. mtime = div_u64(mtime, SEGS_PER_SEC(sbi));
  4546. if (sit_i->min_mtime > mtime)
  4547. sit_i->min_mtime = mtime;
  4548. }
  4549. sit_i->max_mtime = get_mtime(sbi, false);
  4550. sit_i->dirty_max_mtime = 0;
  4551. up_write(&sit_i->sentry_lock);
  4552. }
  4553. int f2fs_build_segment_manager(struct f2fs_sb_info *sbi)
  4554. {
  4555. struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
  4556. struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
  4557. struct f2fs_sm_info *sm_info;
  4558. int err;
  4559. sm_info = f2fs_kzalloc(sbi, sizeof(struct f2fs_sm_info), GFP_KERNEL);
  4560. if (!sm_info)
  4561. return -ENOMEM;
  4562. /* init sm info */
  4563. sbi->sm_info = sm_info;
  4564. sm_info->seg0_blkaddr = le32_to_cpu(raw_super->segment0_blkaddr);
  4565. sm_info->main_blkaddr = le32_to_cpu(raw_super->main_blkaddr);
  4566. sm_info->segment_count = le32_to_cpu(raw_super->segment_count);
  4567. sm_info->reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count);
  4568. sm_info->ovp_segments = le32_to_cpu(ckpt->overprov_segment_count);
  4569. sm_info->main_segments = le32_to_cpu(raw_super->segment_count_main);
  4570. sm_info->ssa_blkaddr = le32_to_cpu(raw_super->ssa_blkaddr);
  4571. sm_info->rec_prefree_segments = sm_info->main_segments *
  4572. DEF_RECLAIM_PREFREE_SEGMENTS / 100;
  4573. if (sm_info->rec_prefree_segments > DEF_MAX_RECLAIM_PREFREE_SEGMENTS)
  4574. sm_info->rec_prefree_segments = DEF_MAX_RECLAIM_PREFREE_SEGMENTS;
  4575. if (!f2fs_lfs_mode(sbi))
  4576. sm_info->ipu_policy = BIT(F2FS_IPU_FSYNC);
  4577. sm_info->min_ipu_util = DEF_MIN_IPU_UTIL;
  4578. sm_info->min_fsync_blocks = DEF_MIN_FSYNC_BLOCKS;
  4579. sm_info->min_seq_blocks = BLKS_PER_SEG(sbi);
  4580. sm_info->min_hot_blocks = DEF_MIN_HOT_BLOCKS;
  4581. sm_info->min_ssr_sections = reserved_sections(sbi);
  4582. INIT_LIST_HEAD(&sm_info->sit_entry_set);
  4583. init_f2fs_rwsem(&sm_info->curseg_lock);
  4584. err = f2fs_create_flush_cmd_control(sbi);
  4585. if (err)
  4586. return err;
  4587. err = create_discard_cmd_control(sbi);
  4588. if (err)
  4589. return err;
  4590. err = build_sit_info(sbi);
  4591. if (err)
  4592. return err;
  4593. err = build_free_segmap(sbi);
  4594. if (err)
  4595. return err;
  4596. err = build_curseg(sbi);
  4597. if (err)
  4598. return err;
  4599. /* reinit free segmap based on SIT */
  4600. err = build_sit_entries(sbi);
  4601. if (err)
  4602. return err;
  4603. init_free_segmap(sbi);
  4604. err = build_dirty_segmap(sbi);
  4605. if (err)
  4606. return err;
  4607. err = sanity_check_curseg(sbi);
  4608. if (err)
  4609. return err;
  4610. init_min_max_mtime(sbi);
  4611. return 0;
  4612. }
  4613. static void discard_dirty_segmap(struct f2fs_sb_info *sbi,
  4614. enum dirty_type dirty_type)
  4615. {
  4616. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  4617. mutex_lock(&dirty_i->seglist_lock);
  4618. kvfree(dirty_i->dirty_segmap[dirty_type]);
  4619. dirty_i->nr_dirty[dirty_type] = 0;
  4620. mutex_unlock(&dirty_i->seglist_lock);
  4621. }
  4622. static void destroy_victim_secmap(struct f2fs_sb_info *sbi)
  4623. {
  4624. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  4625. kvfree(dirty_i->pinned_secmap);
  4626. kvfree(dirty_i->victim_secmap);
  4627. }
  4628. static void destroy_dirty_segmap(struct f2fs_sb_info *sbi)
  4629. {
  4630. struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
  4631. int i;
  4632. if (!dirty_i)
  4633. return;
  4634. /* discard pre-free/dirty segments list */
  4635. for (i = 0; i < NR_DIRTY_TYPE; i++)
  4636. discard_dirty_segmap(sbi, i);
  4637. if (__is_large_section(sbi)) {
  4638. mutex_lock(&dirty_i->seglist_lock);
  4639. kvfree(dirty_i->dirty_secmap);
  4640. mutex_unlock(&dirty_i->seglist_lock);
  4641. }
  4642. destroy_victim_secmap(sbi);
  4643. SM_I(sbi)->dirty_info = NULL;
  4644. kfree(dirty_i);
  4645. }
  4646. static void destroy_curseg(struct f2fs_sb_info *sbi)
  4647. {
  4648. struct curseg_info *array = SM_I(sbi)->curseg_array;
  4649. int i;
  4650. if (!array)
  4651. return;
  4652. SM_I(sbi)->curseg_array = NULL;
  4653. for (i = 0; i < NR_CURSEG_TYPE; i++) {
  4654. kfree(array[i].sum_blk);
  4655. kfree(array[i].journal);
  4656. }
  4657. kfree(array);
  4658. }
  4659. static void destroy_free_segmap(struct f2fs_sb_info *sbi)
  4660. {
  4661. struct free_segmap_info *free_i = SM_I(sbi)->free_info;
  4662. if (!free_i)
  4663. return;
  4664. SM_I(sbi)->free_info = NULL;
  4665. kvfree(free_i->free_segmap);
  4666. kvfree(free_i->free_secmap);
  4667. kfree(free_i);
  4668. }
  4669. static void destroy_sit_info(struct f2fs_sb_info *sbi)
  4670. {
  4671. struct sit_info *sit_i = SIT_I(sbi);
  4672. if (!sit_i)
  4673. return;
  4674. if (sit_i->sentries)
  4675. kvfree(sit_i->bitmap);
  4676. kfree(sit_i->tmp_map);
  4677. kvfree(sit_i->sentries);
  4678. kvfree(sit_i->sec_entries);
  4679. kvfree(sit_i->dirty_sentries_bitmap);
  4680. SM_I(sbi)->sit_info = NULL;
  4681. kvfree(sit_i->sit_bitmap);
  4682. #ifdef CONFIG_F2FS_CHECK_FS
  4683. kvfree(sit_i->sit_bitmap_mir);
  4684. kvfree(sit_i->invalid_segmap);
  4685. #endif
  4686. kfree(sit_i);
  4687. }
  4688. void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi)
  4689. {
  4690. struct f2fs_sm_info *sm_info = SM_I(sbi);
  4691. if (!sm_info)
  4692. return;
  4693. f2fs_destroy_flush_cmd_control(sbi, true);
  4694. destroy_discard_cmd_control(sbi);
  4695. destroy_dirty_segmap(sbi);
  4696. destroy_curseg(sbi);
  4697. destroy_free_segmap(sbi);
  4698. destroy_sit_info(sbi);
  4699. sbi->sm_info = NULL;
  4700. kfree(sm_info);
  4701. }
  4702. int __init f2fs_create_segment_manager_caches(void)
  4703. {
  4704. discard_entry_slab = f2fs_kmem_cache_create("f2fs_discard_entry",
  4705. sizeof(struct discard_entry));
  4706. if (!discard_entry_slab)
  4707. goto fail;
  4708. discard_cmd_slab = f2fs_kmem_cache_create("f2fs_discard_cmd",
  4709. sizeof(struct discard_cmd));
  4710. if (!discard_cmd_slab)
  4711. goto destroy_discard_entry;
  4712. sit_entry_set_slab = f2fs_kmem_cache_create("f2fs_sit_entry_set",
  4713. sizeof(struct sit_entry_set));
  4714. if (!sit_entry_set_slab)
  4715. goto destroy_discard_cmd;
  4716. revoke_entry_slab = f2fs_kmem_cache_create("f2fs_revoke_entry",
  4717. sizeof(struct revoke_entry));
  4718. if (!revoke_entry_slab)
  4719. goto destroy_sit_entry_set;
  4720. return 0;
  4721. destroy_sit_entry_set:
  4722. kmem_cache_destroy(sit_entry_set_slab);
  4723. destroy_discard_cmd:
  4724. kmem_cache_destroy(discard_cmd_slab);
  4725. destroy_discard_entry:
  4726. kmem_cache_destroy(discard_entry_slab);
  4727. fail:
  4728. return -ENOMEM;
  4729. }
  4730. void f2fs_destroy_segment_manager_caches(void)
  4731. {
  4732. kmem_cache_destroy(sit_entry_set_slab);
  4733. kmem_cache_destroy(discard_cmd_slab);
  4734. kmem_cache_destroy(discard_entry_slab);
  4735. kmem_cache_destroy(revoke_entry_slab);
  4736. }