file.c 132 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * fs/f2fs/file.c
  4. *
  5. * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  6. * http://www.samsung.com/
  7. */
  8. #include <linux/blk-crypto.h>
  9. #include <linux/fs.h>
  10. #include <linux/f2fs_fs.h>
  11. #include <linux/stat.h>
  12. #include <linux/writeback.h>
  13. #include <linux/blkdev.h>
  14. #include <linux/falloc.h>
  15. #include <linux/filelock.h>
  16. #include <linux/types.h>
  17. #include <linux/compat.h>
  18. #include <linux/uaccess.h>
  19. #include <linux/mount.h>
  20. #include <linux/pagevec.h>
  21. #include <linux/uio.h>
  22. #include <linux/uuid.h>
  23. #include <linux/file.h>
  24. #include <linux/nls.h>
  25. #include <linux/sched/signal.h>
  26. #include <linux/fileattr.h>
  27. #include <linux/fadvise.h>
  28. #include <linux/iomap.h>
  29. #include "f2fs.h"
  30. #include "node.h"
  31. #include "segment.h"
  32. #include "xattr.h"
  33. #include "acl.h"
  34. #include "gc.h"
  35. #include "iostat.h"
  36. #include <trace/events/f2fs.h>
  37. #include <uapi/linux/f2fs.h>
  38. static void f2fs_zero_post_eof_page(struct inode *inode,
  39. loff_t new_size, bool lock)
  40. {
  41. loff_t old_size = i_size_read(inode);
  42. if (old_size >= new_size)
  43. return;
  44. if (mapping_empty(inode->i_mapping))
  45. return;
  46. if (lock)
  47. filemap_invalidate_lock(inode->i_mapping);
  48. /* zero or drop pages only in range of [old_size, new_size] */
  49. truncate_inode_pages_range(inode->i_mapping, old_size, new_size);
  50. if (lock)
  51. filemap_invalidate_unlock(inode->i_mapping);
  52. }
  53. static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
  54. {
  55. struct inode *inode = file_inode(vmf->vma->vm_file);
  56. vm_flags_t flags = vmf->vma->vm_flags;
  57. vm_fault_t ret;
  58. ret = filemap_fault(vmf);
  59. if (ret & VM_FAULT_LOCKED)
  60. f2fs_update_iostat(F2FS_I_SB(inode), inode,
  61. APP_MAPPED_READ_IO, F2FS_BLKSIZE);
  62. trace_f2fs_filemap_fault(inode, vmf->pgoff, flags, ret);
  63. return ret;
  64. }
  65. static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
  66. {
  67. struct folio *folio = page_folio(vmf->page);
  68. struct inode *inode = file_inode(vmf->vma->vm_file);
  69. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  70. struct dnode_of_data dn;
  71. bool need_alloc = !f2fs_is_pinned_file(inode);
  72. int err = 0;
  73. vm_fault_t ret;
  74. if (unlikely(IS_IMMUTABLE(inode)))
  75. return VM_FAULT_SIGBUS;
  76. if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
  77. err = -EIO;
  78. goto out;
  79. }
  80. if (unlikely(f2fs_cp_error(sbi))) {
  81. err = -EIO;
  82. goto out;
  83. }
  84. if (!f2fs_is_checkpoint_ready(sbi)) {
  85. err = -ENOSPC;
  86. goto out;
  87. }
  88. err = f2fs_convert_inline_inode(inode);
  89. if (err)
  90. goto out;
  91. #ifdef CONFIG_F2FS_FS_COMPRESSION
  92. if (f2fs_compressed_file(inode)) {
  93. int ret = f2fs_is_compressed_cluster(inode, folio->index);
  94. if (ret < 0) {
  95. err = ret;
  96. goto out;
  97. } else if (ret) {
  98. need_alloc = false;
  99. }
  100. }
  101. #endif
  102. /* should do out of any locked page */
  103. if (need_alloc)
  104. f2fs_balance_fs(sbi, true);
  105. sb_start_pagefault(inode->i_sb);
  106. f2fs_bug_on(sbi, f2fs_has_inline_data(inode));
  107. f2fs_zero_post_eof_page(inode, (folio->index + 1) << PAGE_SHIFT, true);
  108. file_update_time(vmf->vma->vm_file);
  109. filemap_invalidate_lock_shared(inode->i_mapping);
  110. folio_lock(folio);
  111. if (unlikely(folio->mapping != inode->i_mapping ||
  112. folio_pos(folio) > i_size_read(inode) ||
  113. !folio_test_uptodate(folio))) {
  114. folio_unlock(folio);
  115. err = -EFAULT;
  116. goto out_sem;
  117. }
  118. set_new_dnode(&dn, inode, NULL, NULL, 0);
  119. if (need_alloc) {
  120. /* block allocation */
  121. err = f2fs_get_block_locked(&dn, folio->index);
  122. } else {
  123. err = f2fs_get_dnode_of_data(&dn, folio->index, LOOKUP_NODE);
  124. f2fs_put_dnode(&dn);
  125. if (f2fs_is_pinned_file(inode) &&
  126. !__is_valid_data_blkaddr(dn.data_blkaddr))
  127. err = -EIO;
  128. }
  129. if (err) {
  130. folio_unlock(folio);
  131. goto out_sem;
  132. }
  133. f2fs_folio_wait_writeback(folio, DATA, false, true);
  134. /* wait for GCed page writeback via META_MAPPING */
  135. f2fs_wait_on_block_writeback(inode, dn.data_blkaddr);
  136. /*
  137. * check to see if the page is mapped already (no holes)
  138. */
  139. if (folio_test_mappedtodisk(folio))
  140. goto out_sem;
  141. /* page is wholly or partially inside EOF */
  142. if (((loff_t)(folio->index + 1) << PAGE_SHIFT) >
  143. i_size_read(inode)) {
  144. loff_t offset;
  145. offset = i_size_read(inode) & ~PAGE_MASK;
  146. folio_zero_segment(folio, offset, folio_size(folio));
  147. }
  148. folio_mark_dirty(folio);
  149. f2fs_update_iostat(sbi, inode, APP_MAPPED_IO, F2FS_BLKSIZE);
  150. f2fs_update_time(sbi, REQ_TIME);
  151. out_sem:
  152. filemap_invalidate_unlock_shared(inode->i_mapping);
  153. sb_end_pagefault(inode->i_sb);
  154. out:
  155. ret = vmf_fs_error(err);
  156. trace_f2fs_vm_page_mkwrite(inode, folio->index, vmf->vma->vm_flags, ret);
  157. return ret;
  158. }
  159. static const struct vm_operations_struct f2fs_file_vm_ops = {
  160. .fault = f2fs_filemap_fault,
  161. .map_pages = filemap_map_pages,
  162. .page_mkwrite = f2fs_vm_page_mkwrite,
  163. };
  164. static int get_parent_ino(struct inode *inode, nid_t *pino)
  165. {
  166. struct dentry *dentry;
  167. /*
  168. * Make sure to get the non-deleted alias. The alias associated with
  169. * the open file descriptor being fsync()'ed may be deleted already.
  170. */
  171. dentry = d_find_alias(inode);
  172. if (!dentry)
  173. return 0;
  174. *pino = d_parent_ino(dentry);
  175. dput(dentry);
  176. return 1;
  177. }
  178. static inline enum cp_reason_type need_do_checkpoint(struct inode *inode)
  179. {
  180. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  181. enum cp_reason_type cp_reason = CP_NO_NEEDED;
  182. if (!S_ISREG(inode->i_mode))
  183. cp_reason = CP_NON_REGULAR;
  184. else if (f2fs_compressed_file(inode))
  185. cp_reason = CP_COMPRESSED;
  186. else if (inode->i_nlink != 1)
  187. cp_reason = CP_HARDLINK;
  188. else if (is_sbi_flag_set(sbi, SBI_NEED_CP))
  189. cp_reason = CP_SB_NEED_CP;
  190. else if (file_wrong_pino(inode))
  191. cp_reason = CP_WRONG_PINO;
  192. else if (!f2fs_space_for_roll_forward(sbi))
  193. cp_reason = CP_NO_SPC_ROLL;
  194. else if (!f2fs_is_checkpointed_node(sbi, F2FS_I(inode)->i_pino))
  195. cp_reason = CP_NODE_NEED_CP;
  196. else if (test_opt(sbi, FASTBOOT))
  197. cp_reason = CP_FASTBOOT_MODE;
  198. else if (F2FS_OPTION(sbi).active_logs == 2)
  199. cp_reason = CP_SPEC_LOG_NUM;
  200. else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT &&
  201. f2fs_need_dentry_mark(sbi, inode->i_ino) &&
  202. f2fs_exist_written_data(sbi, F2FS_I(inode)->i_pino,
  203. TRANS_DIR_INO))
  204. cp_reason = CP_RECOVER_DIR;
  205. else if (f2fs_exist_written_data(sbi, F2FS_I(inode)->i_pino,
  206. XATTR_DIR_INO))
  207. cp_reason = CP_XATTR_DIR;
  208. return cp_reason;
  209. }
  210. static bool need_inode_page_update(struct f2fs_sb_info *sbi, nid_t ino)
  211. {
  212. struct folio *i = filemap_get_folio(NODE_MAPPING(sbi), ino);
  213. bool ret = false;
  214. /* But we need to avoid that there are some inode updates */
  215. if ((!IS_ERR(i) && folio_test_dirty(i)) ||
  216. f2fs_need_inode_block_update(sbi, ino))
  217. ret = true;
  218. f2fs_folio_put(i, false);
  219. return ret;
  220. }
  221. static void try_to_fix_pino(struct inode *inode)
  222. {
  223. struct f2fs_inode_info *fi = F2FS_I(inode);
  224. nid_t pino;
  225. f2fs_down_write(&fi->i_sem);
  226. if (file_wrong_pino(inode) && inode->i_nlink == 1 &&
  227. get_parent_ino(inode, &pino)) {
  228. f2fs_i_pino_write(inode, pino);
  229. file_got_pino(inode);
  230. }
  231. f2fs_up_write(&fi->i_sem);
  232. }
  233. static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
  234. int datasync, bool atomic)
  235. {
  236. struct inode *inode = file->f_mapping->host;
  237. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  238. nid_t ino = inode->i_ino;
  239. int ret = 0;
  240. enum cp_reason_type cp_reason = 0;
  241. struct writeback_control wbc = {
  242. .sync_mode = WB_SYNC_ALL,
  243. .nr_to_write = LONG_MAX,
  244. };
  245. unsigned int seq_id = 0;
  246. if (unlikely(f2fs_readonly(inode->i_sb)))
  247. return 0;
  248. trace_f2fs_sync_file_enter(inode);
  249. if (S_ISDIR(inode->i_mode))
  250. goto go_write;
  251. /* if fdatasync is triggered, let's do in-place-update */
  252. if (datasync || get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks)
  253. set_inode_flag(inode, FI_NEED_IPU);
  254. ret = file_write_and_wait_range(file, start, end);
  255. clear_inode_flag(inode, FI_NEED_IPU);
  256. if (ret || is_sbi_flag_set(sbi, SBI_CP_DISABLED)) {
  257. trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
  258. return ret;
  259. }
  260. /* if the inode is dirty, let's recover all the time */
  261. if (!f2fs_skip_inode_update(inode, datasync)) {
  262. f2fs_write_inode(inode, NULL);
  263. goto go_write;
  264. }
  265. /*
  266. * if there is no written data, don't waste time to write recovery info.
  267. */
  268. if (!is_inode_flag_set(inode, FI_APPEND_WRITE) &&
  269. !f2fs_exist_written_data(sbi, ino, APPEND_INO)) {
  270. /* it may call write_inode just prior to fsync */
  271. if (need_inode_page_update(sbi, ino))
  272. goto go_write;
  273. if (is_inode_flag_set(inode, FI_UPDATE_WRITE) ||
  274. f2fs_exist_written_data(sbi, ino, UPDATE_INO))
  275. goto flush_out;
  276. goto out;
  277. } else {
  278. /*
  279. * for OPU case, during fsync(), node can be persisted before
  280. * data when lower device doesn't support write barrier, result
  281. * in data corruption after SPO.
  282. * So for strict fsync mode, force to use atomic write semantics
  283. * to keep write order in between data/node and last node to
  284. * avoid potential data corruption.
  285. */
  286. if (F2FS_OPTION(sbi).fsync_mode ==
  287. FSYNC_MODE_STRICT && !atomic)
  288. atomic = true;
  289. }
  290. go_write:
  291. /*
  292. * Both of fdatasync() and fsync() are able to be recovered from
  293. * sudden-power-off.
  294. */
  295. f2fs_down_read(&F2FS_I(inode)->i_sem);
  296. cp_reason = need_do_checkpoint(inode);
  297. f2fs_up_read(&F2FS_I(inode)->i_sem);
  298. if (cp_reason) {
  299. /* all the dirty node pages should be flushed for POR */
  300. ret = f2fs_sync_fs(inode->i_sb, 1);
  301. /*
  302. * We've secured consistency through sync_fs. Following pino
  303. * will be used only for fsynced inodes after checkpoint.
  304. */
  305. try_to_fix_pino(inode);
  306. clear_inode_flag(inode, FI_APPEND_WRITE);
  307. clear_inode_flag(inode, FI_UPDATE_WRITE);
  308. goto out;
  309. }
  310. sync_nodes:
  311. atomic_inc(&sbi->wb_sync_req[NODE]);
  312. ret = f2fs_fsync_node_pages(sbi, inode, &wbc, atomic, &seq_id);
  313. atomic_dec(&sbi->wb_sync_req[NODE]);
  314. if (ret)
  315. goto out;
  316. /* if cp_error was enabled, we should avoid infinite loop */
  317. if (unlikely(f2fs_cp_error(sbi))) {
  318. ret = -EIO;
  319. goto out;
  320. }
  321. if (f2fs_need_inode_block_update(sbi, ino)) {
  322. f2fs_mark_inode_dirty_sync(inode, true);
  323. f2fs_write_inode(inode, NULL);
  324. goto sync_nodes;
  325. }
  326. /*
  327. * If it's atomic_write, it's just fine to keep write ordering. So
  328. * here we don't need to wait for node write completion, since we use
  329. * node chain which serializes node blocks. If one of node writes are
  330. * reordered, we can see simply broken chain, resulting in stopping
  331. * roll-forward recovery. It means we'll recover all or none node blocks
  332. * given fsync mark.
  333. */
  334. if (!atomic) {
  335. ret = f2fs_wait_on_node_pages_writeback(sbi, seq_id);
  336. if (ret)
  337. goto out;
  338. }
  339. /* once recovery info is written, don't need to tack this */
  340. f2fs_remove_ino_entry(sbi, ino, APPEND_INO);
  341. clear_inode_flag(inode, FI_APPEND_WRITE);
  342. flush_out:
  343. if (!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER)
  344. ret = f2fs_issue_flush(sbi, inode->i_ino);
  345. if (!ret) {
  346. f2fs_remove_ino_entry(sbi, ino, UPDATE_INO);
  347. clear_inode_flag(inode, FI_UPDATE_WRITE);
  348. f2fs_remove_ino_entry(sbi, ino, FLUSH_INO);
  349. }
  350. f2fs_update_time(sbi, REQ_TIME);
  351. out:
  352. trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
  353. return ret;
  354. }
  355. int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
  356. {
  357. if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(file)))))
  358. return -EIO;
  359. return f2fs_do_sync_file(file, start, end, datasync, false);
  360. }
  361. static bool __found_offset(struct address_space *mapping,
  362. struct dnode_of_data *dn, pgoff_t index, int whence)
  363. {
  364. block_t blkaddr = f2fs_data_blkaddr(dn);
  365. struct inode *inode = mapping->host;
  366. bool compressed_cluster = false;
  367. if (f2fs_compressed_file(inode)) {
  368. block_t first_blkaddr = data_blkaddr(dn->inode, dn->node_folio,
  369. ALIGN_DOWN(dn->ofs_in_node, F2FS_I(inode)->i_cluster_size));
  370. compressed_cluster = first_blkaddr == COMPRESS_ADDR;
  371. }
  372. switch (whence) {
  373. case SEEK_DATA:
  374. if (__is_valid_data_blkaddr(blkaddr))
  375. return true;
  376. if (blkaddr == NEW_ADDR &&
  377. xa_get_mark(&mapping->i_pages, index, PAGECACHE_TAG_DIRTY))
  378. return true;
  379. if (compressed_cluster)
  380. return true;
  381. break;
  382. case SEEK_HOLE:
  383. if (compressed_cluster)
  384. return false;
  385. if (blkaddr == NULL_ADDR)
  386. return true;
  387. break;
  388. }
  389. return false;
  390. }
  391. static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
  392. {
  393. struct inode *inode = file->f_mapping->host;
  394. loff_t maxbytes = F2FS_BLK_TO_BYTES(max_file_blocks(inode));
  395. struct dnode_of_data dn;
  396. pgoff_t pgofs, end_offset;
  397. loff_t data_ofs = offset;
  398. loff_t isize;
  399. int err = 0;
  400. inode_lock_shared(inode);
  401. isize = i_size_read(inode);
  402. if (offset >= isize)
  403. goto fail;
  404. /* handle inline data case */
  405. if (f2fs_has_inline_data(inode)) {
  406. if (whence == SEEK_HOLE) {
  407. data_ofs = isize;
  408. goto found;
  409. } else if (whence == SEEK_DATA) {
  410. data_ofs = offset;
  411. goto found;
  412. }
  413. }
  414. pgofs = (pgoff_t)(offset >> PAGE_SHIFT);
  415. for (; data_ofs < isize; data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
  416. set_new_dnode(&dn, inode, NULL, NULL, 0);
  417. err = f2fs_get_dnode_of_data(&dn, pgofs, LOOKUP_NODE);
  418. if (err && err != -ENOENT) {
  419. goto fail;
  420. } else if (err == -ENOENT) {
  421. /* direct node does not exists */
  422. if (whence == SEEK_DATA) {
  423. pgofs = f2fs_get_next_page_offset(&dn, pgofs);
  424. continue;
  425. } else {
  426. goto found;
  427. }
  428. }
  429. end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
  430. /* find data/hole in dnode block */
  431. for (; dn.ofs_in_node < end_offset;
  432. dn.ofs_in_node++, pgofs++,
  433. data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
  434. block_t blkaddr;
  435. blkaddr = f2fs_data_blkaddr(&dn);
  436. if (__is_valid_data_blkaddr(blkaddr) &&
  437. !f2fs_is_valid_blkaddr(F2FS_I_SB(inode),
  438. blkaddr, DATA_GENERIC_ENHANCE)) {
  439. f2fs_put_dnode(&dn);
  440. goto fail;
  441. }
  442. if (__found_offset(file->f_mapping, &dn,
  443. pgofs, whence)) {
  444. f2fs_put_dnode(&dn);
  445. goto found;
  446. }
  447. }
  448. f2fs_put_dnode(&dn);
  449. }
  450. if (whence == SEEK_DATA)
  451. goto fail;
  452. found:
  453. if (whence == SEEK_HOLE && data_ofs > isize)
  454. data_ofs = isize;
  455. inode_unlock_shared(inode);
  456. return vfs_setpos(file, data_ofs, maxbytes);
  457. fail:
  458. inode_unlock_shared(inode);
  459. return -ENXIO;
  460. }
  461. static loff_t f2fs_llseek(struct file *file, loff_t offset, int whence)
  462. {
  463. struct inode *inode = file->f_mapping->host;
  464. loff_t maxbytes = F2FS_BLK_TO_BYTES(max_file_blocks(inode));
  465. switch (whence) {
  466. case SEEK_SET:
  467. case SEEK_CUR:
  468. case SEEK_END:
  469. return generic_file_llseek_size(file, offset, whence,
  470. maxbytes, i_size_read(inode));
  471. case SEEK_DATA:
  472. case SEEK_HOLE:
  473. if (offset < 0)
  474. return -ENXIO;
  475. return f2fs_seek_block(file, offset, whence);
  476. }
  477. return -EINVAL;
  478. }
  479. static int f2fs_file_mmap_prepare(struct vm_area_desc *desc)
  480. {
  481. struct file *file = desc->file;
  482. struct inode *inode = file_inode(file);
  483. if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
  484. return -EIO;
  485. if (!f2fs_is_compress_backend_ready(inode))
  486. return -EOPNOTSUPP;
  487. file_accessed(file);
  488. desc->vm_ops = &f2fs_file_vm_ops;
  489. f2fs_down_read(&F2FS_I(inode)->i_sem);
  490. set_inode_flag(inode, FI_MMAP_FILE);
  491. f2fs_up_read(&F2FS_I(inode)->i_sem);
  492. return 0;
  493. }
  494. static int finish_preallocate_blocks(struct inode *inode)
  495. {
  496. int ret = 0;
  497. bool opened;
  498. f2fs_down_read(&F2FS_I(inode)->i_sem);
  499. opened = is_inode_flag_set(inode, FI_OPENED_FILE);
  500. f2fs_up_read(&F2FS_I(inode)->i_sem);
  501. if (opened)
  502. return 0;
  503. inode_lock(inode);
  504. if (is_inode_flag_set(inode, FI_OPENED_FILE))
  505. goto out_unlock;
  506. if (!file_should_truncate(inode))
  507. goto out_update;
  508. f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  509. filemap_invalidate_lock(inode->i_mapping);
  510. truncate_setsize(inode, i_size_read(inode));
  511. ret = f2fs_truncate(inode);
  512. filemap_invalidate_unlock(inode->i_mapping);
  513. f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  514. if (ret)
  515. goto out_unlock;
  516. file_dont_truncate(inode);
  517. out_update:
  518. f2fs_down_write(&F2FS_I(inode)->i_sem);
  519. set_inode_flag(inode, FI_OPENED_FILE);
  520. f2fs_up_write(&F2FS_I(inode)->i_sem);
  521. out_unlock:
  522. inode_unlock(inode);
  523. return ret;
  524. }
  525. static int f2fs_file_open(struct inode *inode, struct file *filp)
  526. {
  527. int err = fscrypt_file_open(inode, filp);
  528. if (err)
  529. return err;
  530. if (!f2fs_is_compress_backend_ready(inode))
  531. return -EOPNOTSUPP;
  532. if (mapping_large_folio_support(inode->i_mapping) &&
  533. filp->f_mode & FMODE_WRITE)
  534. return -EOPNOTSUPP;
  535. err = fsverity_file_open(inode, filp);
  536. if (err)
  537. return err;
  538. filp->f_mode |= FMODE_NOWAIT;
  539. filp->f_mode |= FMODE_CAN_ODIRECT;
  540. err = dquot_file_open(inode, filp);
  541. if (err)
  542. return err;
  543. err = finish_preallocate_blocks(inode);
  544. if (!err)
  545. atomic_inc(&F2FS_I(inode)->open_count);
  546. return err;
  547. }
  548. void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
  549. {
  550. struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
  551. int nr_free = 0, ofs = dn->ofs_in_node, len = count;
  552. __le32 *addr;
  553. bool compressed_cluster = false;
  554. int cluster_index = 0, valid_blocks = 0;
  555. int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
  556. bool released = !atomic_read(&F2FS_I(dn->inode)->i_compr_blocks);
  557. block_t blkstart;
  558. int blklen = 0;
  559. addr = get_dnode_addr(dn->inode, dn->node_folio) + ofs;
  560. blkstart = le32_to_cpu(*addr);
  561. /* Assumption: truncation starts with cluster */
  562. for (; count > 0; count--, addr++, dn->ofs_in_node++, cluster_index++) {
  563. block_t blkaddr = le32_to_cpu(*addr);
  564. if (f2fs_compressed_file(dn->inode) &&
  565. !(cluster_index & (cluster_size - 1))) {
  566. if (compressed_cluster)
  567. f2fs_i_compr_blocks_update(dn->inode,
  568. valid_blocks, false);
  569. compressed_cluster = (blkaddr == COMPRESS_ADDR);
  570. valid_blocks = 0;
  571. }
  572. if (blkaddr == NULL_ADDR)
  573. goto next;
  574. f2fs_set_data_blkaddr(dn, NULL_ADDR);
  575. if (__is_valid_data_blkaddr(blkaddr)) {
  576. if (time_to_inject(sbi, FAULT_BLKADDR_CONSISTENCE))
  577. goto next;
  578. if (!f2fs_is_valid_blkaddr_raw(sbi, blkaddr,
  579. DATA_GENERIC_ENHANCE))
  580. goto next;
  581. if (compressed_cluster)
  582. valid_blocks++;
  583. }
  584. if (blkstart + blklen == blkaddr) {
  585. blklen++;
  586. } else {
  587. f2fs_invalidate_blocks(sbi, blkstart, blklen);
  588. blkstart = blkaddr;
  589. blklen = 1;
  590. }
  591. if (!released || blkaddr != COMPRESS_ADDR)
  592. nr_free++;
  593. continue;
  594. next:
  595. if (blklen)
  596. f2fs_invalidate_blocks(sbi, blkstart, blklen);
  597. blkstart = le32_to_cpu(*(addr + 1));
  598. blklen = 0;
  599. }
  600. if (blklen)
  601. f2fs_invalidate_blocks(sbi, blkstart, blklen);
  602. if (compressed_cluster)
  603. f2fs_i_compr_blocks_update(dn->inode, valid_blocks, false);
  604. if (nr_free) {
  605. pgoff_t fofs;
  606. /*
  607. * once we invalidate valid blkaddr in range [ofs, ofs + count],
  608. * we will invalidate all blkaddr in the whole range.
  609. */
  610. fofs = f2fs_start_bidx_of_node(ofs_of_node(dn->node_folio),
  611. dn->inode) + ofs;
  612. f2fs_update_read_extent_cache_range(dn, fofs, 0, len);
  613. f2fs_update_age_extent_cache_range(dn, fofs, len);
  614. dec_valid_block_count(sbi, dn->inode, nr_free);
  615. }
  616. dn->ofs_in_node = ofs;
  617. f2fs_update_time(sbi, REQ_TIME);
  618. trace_f2fs_truncate_data_blocks_range(dn->inode, dn->nid,
  619. dn->ofs_in_node, nr_free);
  620. }
  621. static int truncate_partial_data_page(struct inode *inode, u64 from,
  622. bool cache_only)
  623. {
  624. loff_t offset = from & (PAGE_SIZE - 1);
  625. pgoff_t index = from >> PAGE_SHIFT;
  626. struct address_space *mapping = inode->i_mapping;
  627. struct folio *folio;
  628. if (!offset && !cache_only)
  629. return 0;
  630. if (cache_only) {
  631. folio = filemap_lock_folio(mapping, index);
  632. if (IS_ERR(folio))
  633. return 0;
  634. if (folio_test_uptodate(folio))
  635. goto truncate_out;
  636. f2fs_folio_put(folio, true);
  637. return 0;
  638. }
  639. folio = f2fs_get_lock_data_folio(inode, index, true);
  640. if (IS_ERR(folio))
  641. return PTR_ERR(folio) == -ENOENT ? 0 : PTR_ERR(folio);
  642. truncate_out:
  643. f2fs_folio_wait_writeback(folio, DATA, true, true);
  644. folio_zero_segment(folio, offset, folio_size(folio));
  645. /* An encrypted inode should have a key and truncate the last page. */
  646. f2fs_bug_on(F2FS_I_SB(inode), cache_only && IS_ENCRYPTED(inode));
  647. if (!cache_only)
  648. folio_mark_dirty(folio);
  649. f2fs_folio_put(folio, true);
  650. return 0;
  651. }
  652. int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
  653. {
  654. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  655. struct dnode_of_data dn;
  656. struct f2fs_lock_context lc;
  657. pgoff_t free_from;
  658. int count = 0, err = 0;
  659. struct folio *ifolio;
  660. bool truncate_page = false;
  661. trace_f2fs_truncate_blocks_enter(inode, from);
  662. if (IS_DEVICE_ALIASING(inode) && from) {
  663. err = -EINVAL;
  664. goto out_err;
  665. }
  666. free_from = (pgoff_t)F2FS_BLK_ALIGN(from);
  667. if (free_from >= max_file_blocks(inode))
  668. goto free_partial;
  669. if (lock)
  670. f2fs_lock_op(sbi, &lc);
  671. ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
  672. if (IS_ERR(ifolio)) {
  673. err = PTR_ERR(ifolio);
  674. goto out;
  675. }
  676. if (IS_DEVICE_ALIASING(inode)) {
  677. struct extent_tree *et = F2FS_I(inode)->extent_tree[EX_READ];
  678. struct extent_info ei = et->largest;
  679. f2fs_invalidate_blocks(sbi, ei.blk, ei.len);
  680. dec_valid_block_count(sbi, inode, ei.len);
  681. f2fs_update_time(sbi, REQ_TIME);
  682. f2fs_folio_put(ifolio, true);
  683. goto out;
  684. }
  685. if (f2fs_has_inline_data(inode)) {
  686. f2fs_truncate_inline_inode(inode, ifolio, from);
  687. f2fs_folio_put(ifolio, true);
  688. truncate_page = true;
  689. goto out;
  690. }
  691. set_new_dnode(&dn, inode, ifolio, NULL, 0);
  692. err = f2fs_get_dnode_of_data(&dn, free_from, LOOKUP_NODE_RA);
  693. if (err) {
  694. if (err == -ENOENT)
  695. goto free_next;
  696. goto out;
  697. }
  698. count = ADDRS_PER_PAGE(dn.node_folio, inode);
  699. count -= dn.ofs_in_node;
  700. f2fs_bug_on(sbi, count < 0);
  701. if (dn.ofs_in_node || IS_INODE(dn.node_folio)) {
  702. f2fs_truncate_data_blocks_range(&dn, count);
  703. free_from += count;
  704. }
  705. f2fs_put_dnode(&dn);
  706. free_next:
  707. err = f2fs_truncate_inode_blocks(inode, free_from);
  708. out:
  709. if (lock)
  710. f2fs_unlock_op(sbi, &lc);
  711. free_partial:
  712. /* lastly zero out the first data page */
  713. if (!err)
  714. err = truncate_partial_data_page(inode, from, truncate_page);
  715. out_err:
  716. trace_f2fs_truncate_blocks_exit(inode, err);
  717. return err;
  718. }
  719. int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock)
  720. {
  721. u64 free_from = from;
  722. int err;
  723. #ifdef CONFIG_F2FS_FS_COMPRESSION
  724. /*
  725. * for compressed file, only support cluster size
  726. * aligned truncation.
  727. */
  728. if (f2fs_compressed_file(inode))
  729. free_from = round_up(from,
  730. F2FS_I(inode)->i_cluster_size << PAGE_SHIFT);
  731. #endif
  732. err = f2fs_do_truncate_blocks(inode, free_from, lock);
  733. if (err)
  734. return err;
  735. #ifdef CONFIG_F2FS_FS_COMPRESSION
  736. /*
  737. * For compressed file, after release compress blocks, don't allow write
  738. * direct, but we should allow write direct after truncate to zero.
  739. */
  740. if (f2fs_compressed_file(inode) && !free_from
  741. && is_inode_flag_set(inode, FI_COMPRESS_RELEASED))
  742. clear_inode_flag(inode, FI_COMPRESS_RELEASED);
  743. if (from != free_from) {
  744. err = f2fs_truncate_partial_cluster(inode, from, lock);
  745. if (err)
  746. return err;
  747. }
  748. #endif
  749. return 0;
  750. }
  751. int f2fs_truncate(struct inode *inode)
  752. {
  753. int err;
  754. if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
  755. return -EIO;
  756. if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
  757. S_ISLNK(inode->i_mode)))
  758. return 0;
  759. trace_f2fs_truncate(inode);
  760. if (time_to_inject(F2FS_I_SB(inode), FAULT_TRUNCATE))
  761. return -EIO;
  762. err = f2fs_dquot_initialize(inode);
  763. if (err)
  764. return err;
  765. /* we should check inline_data size */
  766. if (!f2fs_may_inline_data(inode)) {
  767. err = f2fs_convert_inline_inode(inode);
  768. if (err) {
  769. /*
  770. * Always truncate page #0 to avoid page cache
  771. * leak in evict() path.
  772. */
  773. truncate_inode_pages_range(inode->i_mapping,
  774. F2FS_BLK_TO_BYTES(0),
  775. F2FS_BLK_END_BYTES(0));
  776. return err;
  777. }
  778. }
  779. err = f2fs_truncate_blocks(inode, i_size_read(inode), true);
  780. if (err)
  781. return err;
  782. inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
  783. f2fs_mark_inode_dirty_sync(inode, false);
  784. return 0;
  785. }
  786. static bool f2fs_force_buffered_io(struct inode *inode, int rw)
  787. {
  788. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  789. if (!fscrypt_dio_supported(inode))
  790. return true;
  791. if (fsverity_active(inode))
  792. return true;
  793. if (f2fs_compressed_file(inode))
  794. return true;
  795. /*
  796. * only force direct read to use buffered IO, for direct write,
  797. * it expects inline data conversion before committing IO.
  798. */
  799. if (f2fs_has_inline_data(inode) && rw == READ)
  800. return true;
  801. /* disallow direct IO if any of devices has unaligned blksize */
  802. if (f2fs_is_multi_device(sbi) && !sbi->aligned_blksize)
  803. return true;
  804. /*
  805. * for blkzoned device, fallback direct IO to buffered IO, so
  806. * all IOs can be serialized by log-structured write.
  807. */
  808. if (f2fs_sb_has_blkzoned(sbi) && (rw == WRITE) &&
  809. !f2fs_is_pinned_file(inode))
  810. return true;
  811. if (is_sbi_flag_set(sbi, SBI_CP_DISABLED))
  812. return true;
  813. return false;
  814. }
  815. int f2fs_getattr(struct mnt_idmap *idmap, const struct path *path,
  816. struct kstat *stat, u32 request_mask, unsigned int query_flags)
  817. {
  818. struct inode *inode = d_inode(path->dentry);
  819. struct f2fs_inode_info *fi = F2FS_I(inode);
  820. struct f2fs_inode *ri = NULL;
  821. unsigned int flags;
  822. if (f2fs_has_extra_attr(inode) &&
  823. f2fs_sb_has_inode_crtime(F2FS_I_SB(inode)) &&
  824. F2FS_FITS_IN_INODE(ri, fi->i_extra_isize, i_crtime)) {
  825. stat->result_mask |= STATX_BTIME;
  826. stat->btime.tv_sec = fi->i_crtime.tv_sec;
  827. stat->btime.tv_nsec = fi->i_crtime.tv_nsec;
  828. }
  829. /*
  830. * Return the DIO alignment restrictions if requested. We only return
  831. * this information when requested, since on encrypted files it might
  832. * take a fair bit of work to get if the file wasn't opened recently.
  833. *
  834. * f2fs sometimes supports DIO reads but not DIO writes. STATX_DIOALIGN
  835. * cannot represent that, so in that case we report no DIO support.
  836. */
  837. if ((request_mask & STATX_DIOALIGN) && S_ISREG(inode->i_mode)) {
  838. unsigned int bsize = i_blocksize(inode);
  839. stat->result_mask |= STATX_DIOALIGN;
  840. if (!f2fs_force_buffered_io(inode, WRITE)) {
  841. stat->dio_mem_align = bsize;
  842. stat->dio_offset_align = bsize;
  843. }
  844. }
  845. flags = fi->i_flags;
  846. if (flags & F2FS_COMPR_FL)
  847. stat->attributes |= STATX_ATTR_COMPRESSED;
  848. if (flags & F2FS_APPEND_FL)
  849. stat->attributes |= STATX_ATTR_APPEND;
  850. if (IS_ENCRYPTED(inode))
  851. stat->attributes |= STATX_ATTR_ENCRYPTED;
  852. if (flags & F2FS_IMMUTABLE_FL)
  853. stat->attributes |= STATX_ATTR_IMMUTABLE;
  854. if (flags & F2FS_NODUMP_FL)
  855. stat->attributes |= STATX_ATTR_NODUMP;
  856. if (IS_VERITY(inode))
  857. stat->attributes |= STATX_ATTR_VERITY;
  858. stat->attributes_mask |= (STATX_ATTR_COMPRESSED |
  859. STATX_ATTR_APPEND |
  860. STATX_ATTR_ENCRYPTED |
  861. STATX_ATTR_IMMUTABLE |
  862. STATX_ATTR_NODUMP |
  863. STATX_ATTR_VERITY);
  864. generic_fillattr(idmap, request_mask, inode, stat);
  865. /* we need to show initial sectors used for inline_data/dentries */
  866. if ((S_ISREG(inode->i_mode) && f2fs_has_inline_data(inode)) ||
  867. f2fs_has_inline_dentry(inode))
  868. stat->blocks += (stat->size + 511) >> 9;
  869. return 0;
  870. }
  871. #ifdef CONFIG_F2FS_FS_POSIX_ACL
  872. static void __setattr_copy(struct mnt_idmap *idmap,
  873. struct inode *inode, const struct iattr *attr)
  874. {
  875. unsigned int ia_valid = attr->ia_valid;
  876. i_uid_update(idmap, attr, inode);
  877. i_gid_update(idmap, attr, inode);
  878. if (ia_valid & ATTR_ATIME)
  879. inode_set_atime_to_ts(inode, attr->ia_atime);
  880. if (ia_valid & ATTR_MTIME)
  881. inode_set_mtime_to_ts(inode, attr->ia_mtime);
  882. if (ia_valid & ATTR_CTIME)
  883. inode_set_ctime_to_ts(inode, attr->ia_ctime);
  884. if (ia_valid & ATTR_MODE) {
  885. umode_t mode = attr->ia_mode;
  886. if (!in_group_or_capable(idmap, inode, i_gid_into_vfsgid(idmap, inode)))
  887. mode &= ~S_ISGID;
  888. set_acl_inode(inode, mode);
  889. }
  890. }
  891. #else
  892. #define __setattr_copy setattr_copy
  893. #endif
  894. int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
  895. struct iattr *attr)
  896. {
  897. struct inode *inode = d_inode(dentry);
  898. struct f2fs_inode_info *fi = F2FS_I(inode);
  899. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  900. int err;
  901. if (unlikely(f2fs_cp_error(sbi)))
  902. return -EIO;
  903. err = setattr_prepare(idmap, dentry, attr);
  904. if (err)
  905. return err;
  906. err = fscrypt_prepare_setattr(dentry, attr);
  907. if (err)
  908. return err;
  909. if (unlikely(IS_IMMUTABLE(inode)))
  910. return -EPERM;
  911. if (unlikely(IS_APPEND(inode) &&
  912. (attr->ia_valid & (ATTR_MODE | ATTR_UID |
  913. ATTR_GID | ATTR_TIMES_SET))))
  914. return -EPERM;
  915. if ((attr->ia_valid & ATTR_SIZE)) {
  916. if (!f2fs_is_compress_backend_ready(inode) ||
  917. IS_DEVICE_ALIASING(inode))
  918. return -EOPNOTSUPP;
  919. if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED) &&
  920. !IS_ALIGNED(attr->ia_size,
  921. F2FS_BLK_TO_BYTES(fi->i_cluster_size)))
  922. return -EINVAL;
  923. /*
  924. * To prevent scattered pin block generation, we don't allow
  925. * smaller/equal size unaligned truncation for pinned file.
  926. * We only support overwrite IO to pinned file, so don't
  927. * care about larger size truncation.
  928. */
  929. if (f2fs_is_pinned_file(inode) &&
  930. attr->ia_size <= i_size_read(inode) &&
  931. !IS_ALIGNED(attr->ia_size,
  932. F2FS_BLK_TO_BYTES(CAP_BLKS_PER_SEC(sbi))))
  933. return -EINVAL;
  934. }
  935. if (is_quota_modification(idmap, inode, attr)) {
  936. err = f2fs_dquot_initialize(inode);
  937. if (err)
  938. return err;
  939. }
  940. if (i_uid_needs_update(idmap, attr, inode) ||
  941. i_gid_needs_update(idmap, attr, inode)) {
  942. struct f2fs_lock_context lc;
  943. f2fs_lock_op(sbi, &lc);
  944. err = dquot_transfer(idmap, inode, attr);
  945. if (err) {
  946. set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
  947. f2fs_unlock_op(sbi, &lc);
  948. return err;
  949. }
  950. /*
  951. * update uid/gid under lock_op(), so that dquot and inode can
  952. * be updated atomically.
  953. */
  954. i_uid_update(idmap, attr, inode);
  955. i_gid_update(idmap, attr, inode);
  956. f2fs_mark_inode_dirty_sync(inode, true);
  957. f2fs_unlock_op(sbi, &lc);
  958. }
  959. if (attr->ia_valid & ATTR_SIZE) {
  960. loff_t old_size = i_size_read(inode);
  961. if (attr->ia_size > MAX_INLINE_DATA(inode)) {
  962. /*
  963. * should convert inline inode before i_size_write to
  964. * keep smaller than inline_data size with inline flag.
  965. */
  966. err = f2fs_convert_inline_inode(inode);
  967. if (err)
  968. return err;
  969. }
  970. /*
  971. * wait for inflight dio, blocks should be removed after
  972. * IO completion.
  973. */
  974. if (attr->ia_size < old_size)
  975. inode_dio_wait(inode);
  976. f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
  977. filemap_invalidate_lock(inode->i_mapping);
  978. if (attr->ia_size > old_size)
  979. f2fs_zero_post_eof_page(inode, attr->ia_size, false);
  980. truncate_setsize(inode, attr->ia_size);
  981. if (attr->ia_size <= old_size)
  982. err = f2fs_truncate(inode);
  983. /*
  984. * do not trim all blocks after i_size if target size is
  985. * larger than i_size.
  986. */
  987. filemap_invalidate_unlock(inode->i_mapping);
  988. f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
  989. if (err)
  990. return err;
  991. spin_lock(&fi->i_size_lock);
  992. inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
  993. fi->last_disk_size = i_size_read(inode);
  994. spin_unlock(&fi->i_size_lock);
  995. }
  996. __setattr_copy(idmap, inode, attr);
  997. if (attr->ia_valid & ATTR_MODE) {
  998. err = posix_acl_chmod(idmap, dentry, f2fs_get_inode_mode(inode));
  999. if (is_inode_flag_set(inode, FI_ACL_MODE)) {
  1000. if (!err)
  1001. inode->i_mode = fi->i_acl_mode;
  1002. clear_inode_flag(inode, FI_ACL_MODE);
  1003. }
  1004. }
  1005. /* file size may changed here */
  1006. f2fs_mark_inode_dirty_sync(inode, true);
  1007. /* inode change will produce dirty node pages flushed by checkpoint */
  1008. f2fs_balance_fs(sbi, true);
  1009. return err;
  1010. }
  1011. const struct inode_operations f2fs_file_inode_operations = {
  1012. .getattr = f2fs_getattr,
  1013. .setattr = f2fs_setattr,
  1014. .get_inode_acl = f2fs_get_acl,
  1015. .set_acl = f2fs_set_acl,
  1016. .listxattr = f2fs_listxattr,
  1017. .fiemap = f2fs_fiemap,
  1018. .fileattr_get = f2fs_fileattr_get,
  1019. .fileattr_set = f2fs_fileattr_set,
  1020. };
  1021. static int fill_zero(struct inode *inode, pgoff_t index,
  1022. loff_t start, loff_t len)
  1023. {
  1024. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1025. struct folio *folio;
  1026. struct f2fs_lock_context lc;
  1027. if (!len)
  1028. return 0;
  1029. f2fs_balance_fs(sbi, true);
  1030. f2fs_lock_op(sbi, &lc);
  1031. folio = f2fs_get_new_data_folio(inode, NULL, index, false);
  1032. f2fs_unlock_op(sbi, &lc);
  1033. if (IS_ERR(folio))
  1034. return PTR_ERR(folio);
  1035. f2fs_folio_wait_writeback(folio, DATA, true, true);
  1036. folio_zero_range(folio, start, len);
  1037. folio_mark_dirty(folio);
  1038. f2fs_folio_put(folio, true);
  1039. return 0;
  1040. }
  1041. int f2fs_truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
  1042. {
  1043. int err;
  1044. while (pg_start < pg_end) {
  1045. struct dnode_of_data dn;
  1046. pgoff_t end_offset, count;
  1047. set_new_dnode(&dn, inode, NULL, NULL, 0);
  1048. err = f2fs_get_dnode_of_data(&dn, pg_start, LOOKUP_NODE);
  1049. if (err) {
  1050. if (err == -ENOENT) {
  1051. pg_start = f2fs_get_next_page_offset(&dn,
  1052. pg_start);
  1053. continue;
  1054. }
  1055. return err;
  1056. }
  1057. end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
  1058. count = min(end_offset - dn.ofs_in_node, pg_end - pg_start);
  1059. f2fs_bug_on(F2FS_I_SB(inode), count == 0 || count > end_offset);
  1060. f2fs_truncate_data_blocks_range(&dn, count);
  1061. f2fs_put_dnode(&dn);
  1062. pg_start += count;
  1063. }
  1064. return 0;
  1065. }
  1066. static int f2fs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
  1067. {
  1068. pgoff_t pg_start, pg_end;
  1069. loff_t off_start, off_end;
  1070. int ret;
  1071. ret = f2fs_convert_inline_inode(inode);
  1072. if (ret)
  1073. return ret;
  1074. f2fs_zero_post_eof_page(inode, offset + len, true);
  1075. pg_start = ((unsigned long long) offset) >> PAGE_SHIFT;
  1076. pg_end = ((unsigned long long) offset + len) >> PAGE_SHIFT;
  1077. off_start = offset & (PAGE_SIZE - 1);
  1078. off_end = (offset + len) & (PAGE_SIZE - 1);
  1079. if (pg_start == pg_end) {
  1080. ret = fill_zero(inode, pg_start, off_start,
  1081. off_end - off_start);
  1082. if (ret)
  1083. return ret;
  1084. } else {
  1085. if (off_start) {
  1086. ret = fill_zero(inode, pg_start++, off_start,
  1087. PAGE_SIZE - off_start);
  1088. if (ret)
  1089. return ret;
  1090. }
  1091. if (off_end) {
  1092. ret = fill_zero(inode, pg_end, 0, off_end);
  1093. if (ret)
  1094. return ret;
  1095. }
  1096. if (pg_start < pg_end) {
  1097. loff_t blk_start, blk_end;
  1098. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1099. struct f2fs_lock_context lc;
  1100. f2fs_balance_fs(sbi, true);
  1101. blk_start = (loff_t)pg_start << PAGE_SHIFT;
  1102. blk_end = (loff_t)pg_end << PAGE_SHIFT;
  1103. f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  1104. filemap_invalidate_lock(inode->i_mapping);
  1105. truncate_pagecache_range(inode, blk_start, blk_end - 1);
  1106. f2fs_lock_op(sbi, &lc);
  1107. ret = f2fs_truncate_hole(inode, pg_start, pg_end);
  1108. f2fs_unlock_op(sbi, &lc);
  1109. filemap_invalidate_unlock(inode->i_mapping);
  1110. f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  1111. }
  1112. }
  1113. return ret;
  1114. }
  1115. static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr,
  1116. int *do_replace, pgoff_t off, pgoff_t len)
  1117. {
  1118. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1119. struct dnode_of_data dn;
  1120. int ret, done, i;
  1121. next_dnode:
  1122. set_new_dnode(&dn, inode, NULL, NULL, 0);
  1123. ret = f2fs_get_dnode_of_data(&dn, off, LOOKUP_NODE_RA);
  1124. if (ret && ret != -ENOENT) {
  1125. return ret;
  1126. } else if (ret == -ENOENT) {
  1127. if (dn.max_level == 0)
  1128. return -ENOENT;
  1129. done = min((pgoff_t)ADDRS_PER_BLOCK(inode) -
  1130. dn.ofs_in_node, len);
  1131. blkaddr += done;
  1132. do_replace += done;
  1133. goto next;
  1134. }
  1135. done = min((pgoff_t)ADDRS_PER_PAGE(dn.node_folio, inode) -
  1136. dn.ofs_in_node, len);
  1137. for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) {
  1138. *blkaddr = f2fs_data_blkaddr(&dn);
  1139. if (__is_valid_data_blkaddr(*blkaddr) &&
  1140. !f2fs_is_valid_blkaddr(sbi, *blkaddr,
  1141. DATA_GENERIC_ENHANCE)) {
  1142. f2fs_put_dnode(&dn);
  1143. return -EFSCORRUPTED;
  1144. }
  1145. if (!f2fs_is_checkpointed_data(sbi, *blkaddr)) {
  1146. if (f2fs_lfs_mode(sbi)) {
  1147. f2fs_put_dnode(&dn);
  1148. return -EOPNOTSUPP;
  1149. }
  1150. /* do not invalidate this block address */
  1151. f2fs_update_data_blkaddr(&dn, NULL_ADDR);
  1152. *do_replace = 1;
  1153. }
  1154. }
  1155. f2fs_put_dnode(&dn);
  1156. next:
  1157. len -= done;
  1158. off += done;
  1159. if (len)
  1160. goto next_dnode;
  1161. return 0;
  1162. }
  1163. static int __roll_back_blkaddrs(struct inode *inode, block_t *blkaddr,
  1164. int *do_replace, pgoff_t off, int len)
  1165. {
  1166. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1167. struct dnode_of_data dn;
  1168. int ret, i;
  1169. for (i = 0; i < len; i++, do_replace++, blkaddr++) {
  1170. if (*do_replace == 0)
  1171. continue;
  1172. set_new_dnode(&dn, inode, NULL, NULL, 0);
  1173. ret = f2fs_get_dnode_of_data(&dn, off + i, LOOKUP_NODE_RA);
  1174. if (ret) {
  1175. dec_valid_block_count(sbi, inode, 1);
  1176. f2fs_invalidate_blocks(sbi, *blkaddr, 1);
  1177. } else {
  1178. f2fs_update_data_blkaddr(&dn, *blkaddr);
  1179. }
  1180. f2fs_put_dnode(&dn);
  1181. }
  1182. return 0;
  1183. }
  1184. static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
  1185. block_t *blkaddr, int *do_replace,
  1186. pgoff_t src, pgoff_t dst, pgoff_t len, bool full)
  1187. {
  1188. struct f2fs_sb_info *sbi = F2FS_I_SB(src_inode);
  1189. pgoff_t i = 0;
  1190. int ret;
  1191. while (i < len) {
  1192. if (blkaddr[i] == NULL_ADDR && !full) {
  1193. i++;
  1194. continue;
  1195. }
  1196. if (do_replace[i] || blkaddr[i] == NULL_ADDR) {
  1197. struct dnode_of_data dn;
  1198. struct node_info ni;
  1199. size_t new_size;
  1200. pgoff_t ilen;
  1201. set_new_dnode(&dn, dst_inode, NULL, NULL, 0);
  1202. ret = f2fs_get_dnode_of_data(&dn, dst + i, ALLOC_NODE);
  1203. if (ret)
  1204. return ret;
  1205. ret = f2fs_get_node_info(sbi, dn.nid, &ni, false);
  1206. if (ret) {
  1207. f2fs_put_dnode(&dn);
  1208. return ret;
  1209. }
  1210. ilen = min((pgoff_t)
  1211. ADDRS_PER_PAGE(dn.node_folio, dst_inode) -
  1212. dn.ofs_in_node, len - i);
  1213. do {
  1214. dn.data_blkaddr = f2fs_data_blkaddr(&dn);
  1215. f2fs_truncate_data_blocks_range(&dn, 1);
  1216. if (do_replace[i]) {
  1217. f2fs_i_blocks_write(src_inode,
  1218. 1, false, false);
  1219. f2fs_i_blocks_write(dst_inode,
  1220. 1, true, false);
  1221. f2fs_replace_block(sbi, &dn, dn.data_blkaddr,
  1222. blkaddr[i], ni.version, true, false);
  1223. do_replace[i] = 0;
  1224. }
  1225. dn.ofs_in_node++;
  1226. i++;
  1227. new_size = (loff_t)(dst + i) << PAGE_SHIFT;
  1228. if (dst_inode->i_size < new_size)
  1229. f2fs_i_size_write(dst_inode, new_size);
  1230. } while (--ilen && (do_replace[i] || blkaddr[i] == NULL_ADDR));
  1231. f2fs_put_dnode(&dn);
  1232. } else {
  1233. struct folio *fsrc, *fdst;
  1234. fsrc = f2fs_get_lock_data_folio(src_inode,
  1235. src + i, true);
  1236. if (IS_ERR(fsrc))
  1237. return PTR_ERR(fsrc);
  1238. fdst = f2fs_get_new_data_folio(dst_inode, NULL, dst + i,
  1239. true);
  1240. if (IS_ERR(fdst)) {
  1241. f2fs_folio_put(fsrc, true);
  1242. return PTR_ERR(fdst);
  1243. }
  1244. f2fs_folio_wait_writeback(fdst, DATA, true, true);
  1245. memcpy_folio(fdst, 0, fsrc, 0, PAGE_SIZE);
  1246. folio_mark_dirty(fdst);
  1247. folio_set_f2fs_gcing(fdst);
  1248. f2fs_folio_put(fdst, true);
  1249. f2fs_folio_put(fsrc, true);
  1250. ret = f2fs_truncate_hole(src_inode,
  1251. src + i, src + i + 1);
  1252. if (ret)
  1253. return ret;
  1254. i++;
  1255. }
  1256. }
  1257. return 0;
  1258. }
  1259. static int __exchange_data_block(struct inode *src_inode,
  1260. struct inode *dst_inode, pgoff_t src, pgoff_t dst,
  1261. pgoff_t len, bool full)
  1262. {
  1263. block_t *src_blkaddr;
  1264. int *do_replace;
  1265. pgoff_t olen;
  1266. int ret;
  1267. while (len) {
  1268. olen = min((pgoff_t)4 * ADDRS_PER_BLOCK(src_inode), len);
  1269. src_blkaddr = f2fs_kvzalloc(F2FS_I_SB(src_inode),
  1270. array_size(olen, sizeof(block_t)),
  1271. GFP_NOFS);
  1272. if (!src_blkaddr)
  1273. return -ENOMEM;
  1274. do_replace = f2fs_kvzalloc(F2FS_I_SB(src_inode),
  1275. array_size(olen, sizeof(int)),
  1276. GFP_NOFS);
  1277. if (!do_replace) {
  1278. kvfree(src_blkaddr);
  1279. return -ENOMEM;
  1280. }
  1281. ret = __read_out_blkaddrs(src_inode, src_blkaddr,
  1282. do_replace, src, olen);
  1283. if (ret)
  1284. goto roll_back;
  1285. ret = __clone_blkaddrs(src_inode, dst_inode, src_blkaddr,
  1286. do_replace, src, dst, olen, full);
  1287. if (ret)
  1288. goto roll_back;
  1289. src += olen;
  1290. dst += olen;
  1291. len -= olen;
  1292. kvfree(src_blkaddr);
  1293. kvfree(do_replace);
  1294. }
  1295. return 0;
  1296. roll_back:
  1297. __roll_back_blkaddrs(src_inode, src_blkaddr, do_replace, src, olen);
  1298. kvfree(src_blkaddr);
  1299. kvfree(do_replace);
  1300. return ret;
  1301. }
  1302. static int f2fs_do_collapse(struct inode *inode, loff_t offset, loff_t len)
  1303. {
  1304. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1305. struct f2fs_lock_context lc;
  1306. pgoff_t nrpages = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
  1307. pgoff_t start = offset >> PAGE_SHIFT;
  1308. pgoff_t end = (offset + len) >> PAGE_SHIFT;
  1309. int ret;
  1310. f2fs_balance_fs(sbi, true);
  1311. /* avoid gc operation during block exchange */
  1312. f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  1313. filemap_invalidate_lock(inode->i_mapping);
  1314. f2fs_zero_post_eof_page(inode, offset + len, false);
  1315. f2fs_lock_op(sbi, &lc);
  1316. f2fs_drop_extent_tree(inode);
  1317. truncate_pagecache(inode, offset);
  1318. ret = __exchange_data_block(inode, inode, end, start, nrpages - end, true);
  1319. f2fs_unlock_op(sbi, &lc);
  1320. filemap_invalidate_unlock(inode->i_mapping);
  1321. f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  1322. return ret;
  1323. }
  1324. static int f2fs_collapse_range(struct inode *inode, loff_t offset, loff_t len)
  1325. {
  1326. loff_t new_size;
  1327. int ret;
  1328. if (offset + len >= i_size_read(inode))
  1329. return -EINVAL;
  1330. /* collapse range should be aligned to block size of f2fs. */
  1331. if (offset & (F2FS_BLKSIZE - 1) || len & (F2FS_BLKSIZE - 1))
  1332. return -EINVAL;
  1333. ret = f2fs_convert_inline_inode(inode);
  1334. if (ret)
  1335. return ret;
  1336. /* write out all dirty pages from offset */
  1337. ret = filemap_write_and_wait_range(inode->i_mapping, offset, LLONG_MAX);
  1338. if (ret)
  1339. return ret;
  1340. ret = f2fs_do_collapse(inode, offset, len);
  1341. if (ret)
  1342. return ret;
  1343. /* write out all moved pages, if possible */
  1344. filemap_invalidate_lock(inode->i_mapping);
  1345. filemap_write_and_wait_range(inode->i_mapping, offset, LLONG_MAX);
  1346. truncate_pagecache(inode, offset);
  1347. new_size = i_size_read(inode) - len;
  1348. ret = f2fs_truncate_blocks(inode, new_size, true);
  1349. filemap_invalidate_unlock(inode->i_mapping);
  1350. if (!ret)
  1351. f2fs_i_size_write(inode, new_size);
  1352. return ret;
  1353. }
  1354. static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
  1355. pgoff_t end)
  1356. {
  1357. struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
  1358. pgoff_t index = start;
  1359. unsigned int ofs_in_node = dn->ofs_in_node;
  1360. blkcnt_t count = 0;
  1361. int ret;
  1362. for (; index < end; index++, dn->ofs_in_node++) {
  1363. if (f2fs_data_blkaddr(dn) == NULL_ADDR)
  1364. count++;
  1365. }
  1366. dn->ofs_in_node = ofs_in_node;
  1367. ret = f2fs_reserve_new_blocks(dn, count);
  1368. if (ret)
  1369. return ret;
  1370. dn->ofs_in_node = ofs_in_node;
  1371. for (index = start; index < end; index++, dn->ofs_in_node++) {
  1372. dn->data_blkaddr = f2fs_data_blkaddr(dn);
  1373. /*
  1374. * f2fs_reserve_new_blocks will not guarantee entire block
  1375. * allocation.
  1376. */
  1377. if (dn->data_blkaddr == NULL_ADDR) {
  1378. ret = -ENOSPC;
  1379. break;
  1380. }
  1381. if (dn->data_blkaddr == NEW_ADDR)
  1382. continue;
  1383. if (!f2fs_is_valid_blkaddr(sbi, dn->data_blkaddr,
  1384. DATA_GENERIC_ENHANCE)) {
  1385. ret = -EFSCORRUPTED;
  1386. break;
  1387. }
  1388. f2fs_invalidate_blocks(sbi, dn->data_blkaddr, 1);
  1389. f2fs_set_data_blkaddr(dn, NEW_ADDR);
  1390. }
  1391. if (index > start) {
  1392. f2fs_update_read_extent_cache_range(dn, start, 0,
  1393. index - start);
  1394. f2fs_update_age_extent_cache_range(dn, start, index - start);
  1395. }
  1396. return ret;
  1397. }
  1398. static int f2fs_zero_range(struct inode *inode, loff_t offset, loff_t len,
  1399. int mode)
  1400. {
  1401. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1402. struct address_space *mapping = inode->i_mapping;
  1403. pgoff_t index, pg_start, pg_end;
  1404. loff_t new_size = i_size_read(inode);
  1405. loff_t off_start, off_end;
  1406. int ret = 0;
  1407. ret = inode_newsize_ok(inode, (len + offset));
  1408. if (ret)
  1409. return ret;
  1410. ret = f2fs_convert_inline_inode(inode);
  1411. if (ret)
  1412. return ret;
  1413. ret = filemap_write_and_wait_range(mapping, offset, offset + len - 1);
  1414. if (ret)
  1415. return ret;
  1416. f2fs_zero_post_eof_page(inode, offset + len, true);
  1417. pg_start = ((unsigned long long) offset) >> PAGE_SHIFT;
  1418. pg_end = ((unsigned long long) offset + len) >> PAGE_SHIFT;
  1419. off_start = offset & (PAGE_SIZE - 1);
  1420. off_end = (offset + len) & (PAGE_SIZE - 1);
  1421. if (pg_start == pg_end) {
  1422. ret = fill_zero(inode, pg_start, off_start,
  1423. off_end - off_start);
  1424. if (ret)
  1425. return ret;
  1426. new_size = max_t(loff_t, new_size, offset + len);
  1427. } else {
  1428. if (off_start) {
  1429. ret = fill_zero(inode, pg_start++, off_start,
  1430. PAGE_SIZE - off_start);
  1431. if (ret)
  1432. return ret;
  1433. new_size = max_t(loff_t, new_size,
  1434. (loff_t)pg_start << PAGE_SHIFT);
  1435. }
  1436. for (index = pg_start; index < pg_end;) {
  1437. struct dnode_of_data dn;
  1438. struct f2fs_lock_context lc;
  1439. unsigned int end_offset;
  1440. pgoff_t end;
  1441. f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  1442. filemap_invalidate_lock(mapping);
  1443. truncate_pagecache_range(inode,
  1444. (loff_t)index << PAGE_SHIFT,
  1445. ((loff_t)pg_end << PAGE_SHIFT) - 1);
  1446. f2fs_lock_op(sbi, &lc);
  1447. set_new_dnode(&dn, inode, NULL, NULL, 0);
  1448. ret = f2fs_get_dnode_of_data(&dn, index, ALLOC_NODE);
  1449. if (ret) {
  1450. f2fs_unlock_op(sbi, &lc);
  1451. filemap_invalidate_unlock(mapping);
  1452. f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  1453. goto out;
  1454. }
  1455. end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
  1456. end = min(pg_end, end_offset - dn.ofs_in_node + index);
  1457. ret = f2fs_do_zero_range(&dn, index, end);
  1458. f2fs_put_dnode(&dn);
  1459. f2fs_unlock_op(sbi, &lc);
  1460. filemap_invalidate_unlock(mapping);
  1461. f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  1462. f2fs_balance_fs(sbi, dn.node_changed);
  1463. if (ret)
  1464. goto out;
  1465. index = end;
  1466. new_size = max_t(loff_t, new_size,
  1467. (loff_t)index << PAGE_SHIFT);
  1468. }
  1469. if (off_end) {
  1470. ret = fill_zero(inode, pg_end, 0, off_end);
  1471. if (ret)
  1472. goto out;
  1473. new_size = max_t(loff_t, new_size, offset + len);
  1474. }
  1475. }
  1476. out:
  1477. if (new_size > i_size_read(inode)) {
  1478. if (mode & FALLOC_FL_KEEP_SIZE)
  1479. file_set_keep_isize(inode);
  1480. else
  1481. f2fs_i_size_write(inode, new_size);
  1482. }
  1483. return ret;
  1484. }
  1485. static int f2fs_insert_range(struct inode *inode, loff_t offset, loff_t len)
  1486. {
  1487. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1488. struct address_space *mapping = inode->i_mapping;
  1489. pgoff_t nr, pg_start, pg_end, delta, idx;
  1490. loff_t new_size;
  1491. int ret = 0;
  1492. new_size = i_size_read(inode) + len;
  1493. ret = inode_newsize_ok(inode, new_size);
  1494. if (ret)
  1495. return ret;
  1496. if (offset >= i_size_read(inode))
  1497. return -EINVAL;
  1498. /* insert range should be aligned to block size of f2fs. */
  1499. if (offset & (F2FS_BLKSIZE - 1) || len & (F2FS_BLKSIZE - 1))
  1500. return -EINVAL;
  1501. ret = f2fs_convert_inline_inode(inode);
  1502. if (ret)
  1503. return ret;
  1504. f2fs_balance_fs(sbi, true);
  1505. filemap_invalidate_lock(mapping);
  1506. ret = f2fs_truncate_blocks(inode, i_size_read(inode), true);
  1507. filemap_invalidate_unlock(mapping);
  1508. if (ret)
  1509. return ret;
  1510. /* write out all dirty pages from offset */
  1511. ret = filemap_write_and_wait_range(mapping, offset, LLONG_MAX);
  1512. if (ret)
  1513. return ret;
  1514. pg_start = offset >> PAGE_SHIFT;
  1515. pg_end = (offset + len) >> PAGE_SHIFT;
  1516. delta = pg_end - pg_start;
  1517. idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
  1518. /* avoid gc operation during block exchange */
  1519. f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  1520. filemap_invalidate_lock(mapping);
  1521. f2fs_zero_post_eof_page(inode, offset + len, false);
  1522. truncate_pagecache(inode, offset);
  1523. while (!ret && idx > pg_start) {
  1524. struct f2fs_lock_context lc;
  1525. nr = idx - pg_start;
  1526. if (nr > delta)
  1527. nr = delta;
  1528. idx -= nr;
  1529. f2fs_lock_op(sbi, &lc);
  1530. f2fs_drop_extent_tree(inode);
  1531. ret = __exchange_data_block(inode, inode, idx,
  1532. idx + delta, nr, false);
  1533. f2fs_unlock_op(sbi, &lc);
  1534. }
  1535. filemap_invalidate_unlock(mapping);
  1536. f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  1537. if (ret)
  1538. return ret;
  1539. /* write out all moved pages, if possible */
  1540. filemap_invalidate_lock(mapping);
  1541. ret = filemap_write_and_wait_range(mapping, offset, LLONG_MAX);
  1542. truncate_pagecache(inode, offset);
  1543. filemap_invalidate_unlock(mapping);
  1544. if (!ret)
  1545. f2fs_i_size_write(inode, new_size);
  1546. return ret;
  1547. }
  1548. static int f2fs_expand_inode_data(struct inode *inode, loff_t offset,
  1549. loff_t len, int mode)
  1550. {
  1551. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1552. struct f2fs_map_blocks map = { .m_next_pgofs = NULL,
  1553. .m_next_extent = NULL, .m_seg_type = NO_CHECK_TYPE,
  1554. .m_may_create = true };
  1555. struct f2fs_gc_control gc_control = { .victim_segno = NULL_SEGNO,
  1556. .init_gc_type = FG_GC,
  1557. .should_migrate_blocks = false,
  1558. .err_gc_skipped = true,
  1559. .nr_free_secs = 0 };
  1560. pgoff_t pg_start, pg_end;
  1561. loff_t new_size;
  1562. loff_t off_end;
  1563. block_t expanded = 0;
  1564. int err;
  1565. err = inode_newsize_ok(inode, (len + offset));
  1566. if (err)
  1567. return err;
  1568. err = f2fs_convert_inline_inode(inode);
  1569. if (err)
  1570. return err;
  1571. f2fs_zero_post_eof_page(inode, offset + len, true);
  1572. f2fs_balance_fs(sbi, true);
  1573. pg_start = ((unsigned long long)offset) >> PAGE_SHIFT;
  1574. pg_end = ((unsigned long long)offset + len) >> PAGE_SHIFT;
  1575. off_end = (offset + len) & (PAGE_SIZE - 1);
  1576. map.m_lblk = pg_start;
  1577. map.m_len = pg_end - pg_start;
  1578. if (off_end)
  1579. map.m_len++;
  1580. if (!map.m_len)
  1581. return 0;
  1582. if (f2fs_is_pinned_file(inode)) {
  1583. block_t sec_blks = CAP_BLKS_PER_SEC(sbi);
  1584. block_t sec_len = roundup(map.m_len, sec_blks);
  1585. map.m_len = sec_blks;
  1586. next_alloc:
  1587. f2fs_down_write(&sbi->pin_sem);
  1588. if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
  1589. if (has_not_enough_free_secs(sbi, 0, 0)) {
  1590. f2fs_up_write(&sbi->pin_sem);
  1591. err = -ENOSPC;
  1592. f2fs_warn_ratelimited(sbi,
  1593. "ino:%lu, start:%lu, end:%lu, need to trigger GC to "
  1594. "reclaim enough free segment when checkpoint is enabled",
  1595. inode->i_ino, pg_start, pg_end);
  1596. goto out_err;
  1597. }
  1598. }
  1599. if (has_not_enough_free_secs(sbi, 0,
  1600. sbi->reserved_pin_section)) {
  1601. f2fs_down_write_trace(&sbi->gc_lock, &gc_control.lc);
  1602. stat_inc_gc_call_count(sbi, FOREGROUND);
  1603. err = f2fs_gc(sbi, &gc_control);
  1604. if (err && err != -ENODATA) {
  1605. f2fs_up_write(&sbi->pin_sem);
  1606. goto out_err;
  1607. }
  1608. }
  1609. err = f2fs_allocate_pinning_section(sbi);
  1610. if (err) {
  1611. f2fs_up_write(&sbi->pin_sem);
  1612. goto out_err;
  1613. }
  1614. map.m_seg_type = CURSEG_COLD_DATA_PINNED;
  1615. err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_PRE_DIO);
  1616. file_dont_truncate(inode);
  1617. f2fs_up_write(&sbi->pin_sem);
  1618. expanded += map.m_len;
  1619. sec_len -= map.m_len;
  1620. map.m_lblk += map.m_len;
  1621. if (!err && sec_len)
  1622. goto next_alloc;
  1623. map.m_len = expanded;
  1624. } else {
  1625. err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_PRE_AIO);
  1626. expanded = map.m_len;
  1627. }
  1628. out_err:
  1629. if (err) {
  1630. pgoff_t last_off;
  1631. if (!expanded)
  1632. return err;
  1633. last_off = pg_start + expanded - 1;
  1634. /* update new size to the failed position */
  1635. new_size = (last_off == pg_end) ? offset + len :
  1636. (loff_t)(last_off + 1) << PAGE_SHIFT;
  1637. } else {
  1638. new_size = ((loff_t)pg_end << PAGE_SHIFT) + off_end;
  1639. }
  1640. if (new_size > i_size_read(inode)) {
  1641. if (mode & FALLOC_FL_KEEP_SIZE)
  1642. file_set_keep_isize(inode);
  1643. else
  1644. f2fs_i_size_write(inode, new_size);
  1645. }
  1646. return err;
  1647. }
  1648. static long f2fs_fallocate(struct file *file, int mode,
  1649. loff_t offset, loff_t len)
  1650. {
  1651. struct inode *inode = file_inode(file);
  1652. long ret = 0;
  1653. if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
  1654. return -EIO;
  1655. if (!f2fs_is_checkpoint_ready(F2FS_I_SB(inode)))
  1656. return -ENOSPC;
  1657. if (!f2fs_is_compress_backend_ready(inode) || IS_DEVICE_ALIASING(inode))
  1658. return -EOPNOTSUPP;
  1659. /* f2fs only support ->fallocate for regular file */
  1660. if (!S_ISREG(inode->i_mode))
  1661. return -EINVAL;
  1662. if (IS_ENCRYPTED(inode) &&
  1663. (mode & (FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_INSERT_RANGE)))
  1664. return -EOPNOTSUPP;
  1665. if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE |
  1666. FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE |
  1667. FALLOC_FL_INSERT_RANGE))
  1668. return -EOPNOTSUPP;
  1669. inode_lock(inode);
  1670. /*
  1671. * Pinned file should not support partial truncation since the block
  1672. * can be used by applications.
  1673. */
  1674. if ((f2fs_compressed_file(inode) || f2fs_is_pinned_file(inode)) &&
  1675. (mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_COLLAPSE_RANGE |
  1676. FALLOC_FL_ZERO_RANGE | FALLOC_FL_INSERT_RANGE))) {
  1677. ret = -EOPNOTSUPP;
  1678. goto out;
  1679. }
  1680. ret = file_modified(file);
  1681. if (ret)
  1682. goto out;
  1683. /*
  1684. * wait for inflight dio, blocks should be removed after IO
  1685. * completion.
  1686. */
  1687. inode_dio_wait(inode);
  1688. if (mode & FALLOC_FL_PUNCH_HOLE) {
  1689. if (offset >= inode->i_size)
  1690. goto out;
  1691. ret = f2fs_punch_hole(inode, offset, len);
  1692. } else if (mode & FALLOC_FL_COLLAPSE_RANGE) {
  1693. ret = f2fs_collapse_range(inode, offset, len);
  1694. } else if (mode & FALLOC_FL_ZERO_RANGE) {
  1695. ret = f2fs_zero_range(inode, offset, len, mode);
  1696. } else if (mode & FALLOC_FL_INSERT_RANGE) {
  1697. ret = f2fs_insert_range(inode, offset, len);
  1698. } else {
  1699. ret = f2fs_expand_inode_data(inode, offset, len, mode);
  1700. }
  1701. if (!ret) {
  1702. inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
  1703. f2fs_mark_inode_dirty_sync(inode, false);
  1704. f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
  1705. }
  1706. out:
  1707. inode_unlock(inode);
  1708. trace_f2fs_fallocate(inode, mode, offset, len, ret);
  1709. return ret;
  1710. }
  1711. static int f2fs_release_file(struct inode *inode, struct file *filp)
  1712. {
  1713. if (atomic_dec_and_test(&F2FS_I(inode)->open_count))
  1714. f2fs_remove_donate_inode(inode);
  1715. /*
  1716. * f2fs_release_file is called at every close calls. So we should
  1717. * not drop any inmemory pages by close called by other process.
  1718. */
  1719. if (!(filp->f_mode & FMODE_WRITE) ||
  1720. atomic_read(&inode->i_writecount) != 1)
  1721. return 0;
  1722. inode_lock(inode);
  1723. f2fs_abort_atomic_write(inode, true);
  1724. inode_unlock(inode);
  1725. return 0;
  1726. }
  1727. static int f2fs_file_flush(struct file *file, fl_owner_t id)
  1728. {
  1729. struct inode *inode = file_inode(file);
  1730. /*
  1731. * If the process doing a transaction is crashed, we should do
  1732. * roll-back. Otherwise, other reader/write can see corrupted database
  1733. * until all the writers close its file. Since this should be done
  1734. * before dropping file lock, it needs to do in ->flush.
  1735. */
  1736. if (F2FS_I(inode)->atomic_write_task == current &&
  1737. (current->flags & PF_EXITING)) {
  1738. inode_lock(inode);
  1739. f2fs_abort_atomic_write(inode, true);
  1740. inode_unlock(inode);
  1741. }
  1742. return 0;
  1743. }
  1744. static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
  1745. {
  1746. struct f2fs_inode_info *fi = F2FS_I(inode);
  1747. u32 masked_flags = fi->i_flags & mask;
  1748. /* mask can be shrunk by flags_valid selector */
  1749. iflags &= mask;
  1750. /* Is it quota file? Do not allow user to mess with it */
  1751. if (IS_NOQUOTA(inode))
  1752. return -EPERM;
  1753. if ((iflags ^ masked_flags) & F2FS_CASEFOLD_FL) {
  1754. if (!f2fs_sb_has_casefold(F2FS_I_SB(inode)))
  1755. return -EOPNOTSUPP;
  1756. if (!f2fs_empty_dir(inode))
  1757. return -ENOTEMPTY;
  1758. }
  1759. if (iflags & (F2FS_COMPR_FL | F2FS_NOCOMP_FL)) {
  1760. if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
  1761. return -EOPNOTSUPP;
  1762. if ((iflags & F2FS_COMPR_FL) && (iflags & F2FS_NOCOMP_FL))
  1763. return -EINVAL;
  1764. }
  1765. if ((iflags ^ masked_flags) & F2FS_COMPR_FL) {
  1766. if (masked_flags & F2FS_COMPR_FL) {
  1767. if (!f2fs_disable_compressed_file(inode))
  1768. return -EINVAL;
  1769. } else {
  1770. /* try to convert inline_data to support compression */
  1771. int err = f2fs_convert_inline_inode(inode);
  1772. if (err)
  1773. return err;
  1774. f2fs_down_write(&fi->i_sem);
  1775. if (!f2fs_may_compress(inode) ||
  1776. atomic_read(&fi->writeback) ||
  1777. (S_ISREG(inode->i_mode) &&
  1778. F2FS_HAS_BLOCKS(inode))) {
  1779. f2fs_up_write(&fi->i_sem);
  1780. return -EINVAL;
  1781. }
  1782. err = set_compress_context(inode);
  1783. f2fs_up_write(&fi->i_sem);
  1784. if (err)
  1785. return err;
  1786. }
  1787. }
  1788. fi->i_flags = iflags | (fi->i_flags & ~mask);
  1789. f2fs_bug_on(F2FS_I_SB(inode), (fi->i_flags & F2FS_COMPR_FL) &&
  1790. (fi->i_flags & F2FS_NOCOMP_FL));
  1791. if (fi->i_flags & F2FS_PROJINHERIT_FL)
  1792. set_inode_flag(inode, FI_PROJ_INHERIT);
  1793. else
  1794. clear_inode_flag(inode, FI_PROJ_INHERIT);
  1795. inode_set_ctime_current(inode);
  1796. f2fs_set_inode_flags(inode);
  1797. f2fs_mark_inode_dirty_sync(inode, true);
  1798. return 0;
  1799. }
  1800. /* FS_IOC_[GS]ETFLAGS and FS_IOC_FS[GS]ETXATTR support */
  1801. /*
  1802. * To make a new on-disk f2fs i_flag gettable via FS_IOC_GETFLAGS, add an entry
  1803. * for it to f2fs_fsflags_map[], and add its FS_*_FL equivalent to
  1804. * F2FS_GETTABLE_FS_FL. To also make it settable via FS_IOC_SETFLAGS, also add
  1805. * its FS_*_FL equivalent to F2FS_SETTABLE_FS_FL.
  1806. *
  1807. * Translating flags to fsx_flags value used by FS_IOC_FSGETXATTR and
  1808. * FS_IOC_FSSETXATTR is done by the VFS.
  1809. */
  1810. static const struct {
  1811. u32 iflag;
  1812. u32 fsflag;
  1813. } f2fs_fsflags_map[] = {
  1814. { F2FS_COMPR_FL, FS_COMPR_FL },
  1815. { F2FS_SYNC_FL, FS_SYNC_FL },
  1816. { F2FS_IMMUTABLE_FL, FS_IMMUTABLE_FL },
  1817. { F2FS_APPEND_FL, FS_APPEND_FL },
  1818. { F2FS_NODUMP_FL, FS_NODUMP_FL },
  1819. { F2FS_NOATIME_FL, FS_NOATIME_FL },
  1820. { F2FS_NOCOMP_FL, FS_NOCOMP_FL },
  1821. { F2FS_INDEX_FL, FS_INDEX_FL },
  1822. { F2FS_DIRSYNC_FL, FS_DIRSYNC_FL },
  1823. { F2FS_PROJINHERIT_FL, FS_PROJINHERIT_FL },
  1824. { F2FS_CASEFOLD_FL, FS_CASEFOLD_FL },
  1825. };
  1826. #define F2FS_GETTABLE_FS_FL ( \
  1827. FS_COMPR_FL | \
  1828. FS_SYNC_FL | \
  1829. FS_IMMUTABLE_FL | \
  1830. FS_APPEND_FL | \
  1831. FS_NODUMP_FL | \
  1832. FS_NOATIME_FL | \
  1833. FS_NOCOMP_FL | \
  1834. FS_INDEX_FL | \
  1835. FS_DIRSYNC_FL | \
  1836. FS_PROJINHERIT_FL | \
  1837. FS_ENCRYPT_FL | \
  1838. FS_INLINE_DATA_FL | \
  1839. FS_NOCOW_FL | \
  1840. FS_VERITY_FL | \
  1841. FS_CASEFOLD_FL)
  1842. #define F2FS_SETTABLE_FS_FL ( \
  1843. FS_COMPR_FL | \
  1844. FS_SYNC_FL | \
  1845. FS_IMMUTABLE_FL | \
  1846. FS_APPEND_FL | \
  1847. FS_NODUMP_FL | \
  1848. FS_NOATIME_FL | \
  1849. FS_NOCOMP_FL | \
  1850. FS_DIRSYNC_FL | \
  1851. FS_PROJINHERIT_FL | \
  1852. FS_CASEFOLD_FL)
  1853. /* Convert f2fs on-disk i_flags to FS_IOC_{GET,SET}FLAGS flags */
  1854. static inline u32 f2fs_iflags_to_fsflags(u32 iflags)
  1855. {
  1856. u32 fsflags = 0;
  1857. int i;
  1858. for (i = 0; i < ARRAY_SIZE(f2fs_fsflags_map); i++)
  1859. if (iflags & f2fs_fsflags_map[i].iflag)
  1860. fsflags |= f2fs_fsflags_map[i].fsflag;
  1861. return fsflags;
  1862. }
  1863. /* Convert FS_IOC_{GET,SET}FLAGS flags to f2fs on-disk i_flags */
  1864. static inline u32 f2fs_fsflags_to_iflags(u32 fsflags)
  1865. {
  1866. u32 iflags = 0;
  1867. int i;
  1868. for (i = 0; i < ARRAY_SIZE(f2fs_fsflags_map); i++)
  1869. if (fsflags & f2fs_fsflags_map[i].fsflag)
  1870. iflags |= f2fs_fsflags_map[i].iflag;
  1871. return iflags;
  1872. }
  1873. static int f2fs_ioc_getversion(struct file *filp, unsigned long arg)
  1874. {
  1875. struct inode *inode = file_inode(filp);
  1876. return put_user(inode->i_generation, (int __user *)arg);
  1877. }
  1878. static int f2fs_ioc_start_atomic_write(struct file *filp, bool truncate)
  1879. {
  1880. struct inode *inode = file_inode(filp);
  1881. struct mnt_idmap *idmap = file_mnt_idmap(filp);
  1882. struct f2fs_inode_info *fi = F2FS_I(inode);
  1883. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1884. loff_t isize;
  1885. int ret;
  1886. if (!(filp->f_mode & FMODE_WRITE))
  1887. return -EBADF;
  1888. if (!inode_owner_or_capable(idmap, inode))
  1889. return -EACCES;
  1890. if (!S_ISREG(inode->i_mode))
  1891. return -EINVAL;
  1892. if (filp->f_flags & O_DIRECT)
  1893. return -EINVAL;
  1894. ret = mnt_want_write_file(filp);
  1895. if (ret)
  1896. return ret;
  1897. inode_lock(inode);
  1898. if (!f2fs_disable_compressed_file(inode) ||
  1899. f2fs_is_pinned_file(inode)) {
  1900. ret = -EINVAL;
  1901. goto out;
  1902. }
  1903. if (f2fs_is_atomic_file(inode))
  1904. goto out;
  1905. ret = f2fs_convert_inline_inode(inode);
  1906. if (ret)
  1907. goto out;
  1908. f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
  1909. f2fs_down_write(&fi->i_gc_rwsem[READ]);
  1910. /*
  1911. * Should wait end_io to count F2FS_WB_CP_DATA correctly by
  1912. * f2fs_is_atomic_file.
  1913. */
  1914. if (get_dirty_pages(inode))
  1915. f2fs_warn(sbi, "Unexpected flush for atomic writes: ino=%lu, npages=%u",
  1916. inode->i_ino, get_dirty_pages(inode));
  1917. ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
  1918. if (ret)
  1919. goto out_unlock;
  1920. /* Check if the inode already has a COW inode */
  1921. if (fi->cow_inode == NULL) {
  1922. /* Create a COW inode for atomic write */
  1923. struct dentry *dentry = file_dentry(filp);
  1924. struct inode *dir = d_inode(dentry->d_parent);
  1925. ret = f2fs_get_tmpfile(idmap, dir, &fi->cow_inode);
  1926. if (ret)
  1927. goto out_unlock;
  1928. set_inode_flag(fi->cow_inode, FI_COW_FILE);
  1929. clear_inode_flag(fi->cow_inode, FI_INLINE_DATA);
  1930. /* Set the COW inode's atomic_inode to the atomic inode */
  1931. F2FS_I(fi->cow_inode)->atomic_inode = inode;
  1932. } else {
  1933. /* Reuse the already created COW inode */
  1934. f2fs_bug_on(sbi, get_dirty_pages(fi->cow_inode));
  1935. invalidate_mapping_pages(fi->cow_inode->i_mapping, 0, -1);
  1936. ret = f2fs_do_truncate_blocks(fi->cow_inode, 0, true);
  1937. if (ret)
  1938. goto out_unlock;
  1939. }
  1940. f2fs_write_inode(inode, NULL);
  1941. stat_inc_atomic_inode(inode);
  1942. set_inode_flag(inode, FI_ATOMIC_FILE);
  1943. isize = i_size_read(inode);
  1944. fi->original_i_size = isize;
  1945. if (truncate) {
  1946. set_inode_flag(inode, FI_ATOMIC_REPLACE);
  1947. truncate_inode_pages_final(inode->i_mapping);
  1948. f2fs_i_size_write(inode, 0);
  1949. isize = 0;
  1950. }
  1951. f2fs_i_size_write(fi->cow_inode, isize);
  1952. out_unlock:
  1953. f2fs_up_write(&fi->i_gc_rwsem[READ]);
  1954. f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
  1955. if (ret)
  1956. goto out;
  1957. f2fs_update_time(sbi, REQ_TIME);
  1958. fi->atomic_write_task = current;
  1959. stat_update_max_atomic_write(inode);
  1960. fi->atomic_write_cnt = 0;
  1961. out:
  1962. inode_unlock(inode);
  1963. mnt_drop_write_file(filp);
  1964. return ret;
  1965. }
  1966. static int f2fs_ioc_commit_atomic_write(struct file *filp)
  1967. {
  1968. struct inode *inode = file_inode(filp);
  1969. struct mnt_idmap *idmap = file_mnt_idmap(filp);
  1970. int ret;
  1971. if (!(filp->f_mode & FMODE_WRITE))
  1972. return -EBADF;
  1973. if (!inode_owner_or_capable(idmap, inode))
  1974. return -EACCES;
  1975. ret = mnt_want_write_file(filp);
  1976. if (ret)
  1977. return ret;
  1978. f2fs_balance_fs(F2FS_I_SB(inode), true);
  1979. inode_lock(inode);
  1980. if (f2fs_is_atomic_file(inode)) {
  1981. ret = f2fs_commit_atomic_write(inode);
  1982. if (!ret)
  1983. ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 0, true);
  1984. f2fs_abort_atomic_write(inode, ret);
  1985. } else {
  1986. ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 1, false);
  1987. }
  1988. inode_unlock(inode);
  1989. mnt_drop_write_file(filp);
  1990. return ret;
  1991. }
  1992. static int f2fs_ioc_abort_atomic_write(struct file *filp)
  1993. {
  1994. struct inode *inode = file_inode(filp);
  1995. struct mnt_idmap *idmap = file_mnt_idmap(filp);
  1996. int ret;
  1997. if (!(filp->f_mode & FMODE_WRITE))
  1998. return -EBADF;
  1999. if (!inode_owner_or_capable(idmap, inode))
  2000. return -EACCES;
  2001. ret = mnt_want_write_file(filp);
  2002. if (ret)
  2003. return ret;
  2004. inode_lock(inode);
  2005. f2fs_abort_atomic_write(inode, true);
  2006. inode_unlock(inode);
  2007. mnt_drop_write_file(filp);
  2008. f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
  2009. return ret;
  2010. }
  2011. int f2fs_do_shutdown(struct f2fs_sb_info *sbi, unsigned int flag,
  2012. bool readonly, bool need_lock)
  2013. {
  2014. struct super_block *sb = sbi->sb;
  2015. int ret = 0;
  2016. switch (flag) {
  2017. case F2FS_GOING_DOWN_FULLSYNC:
  2018. ret = bdev_freeze(sb->s_bdev);
  2019. if (ret)
  2020. goto out;
  2021. f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
  2022. bdev_thaw(sb->s_bdev);
  2023. break;
  2024. case F2FS_GOING_DOWN_METASYNC:
  2025. /* do checkpoint only */
  2026. ret = f2fs_sync_fs(sb, 1);
  2027. if (ret) {
  2028. if (ret == -EIO)
  2029. ret = 0;
  2030. goto out;
  2031. }
  2032. f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
  2033. break;
  2034. case F2FS_GOING_DOWN_NOSYNC:
  2035. f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
  2036. break;
  2037. case F2FS_GOING_DOWN_METAFLUSH:
  2038. f2fs_sync_meta_pages(sbi, LONG_MAX, FS_META_IO);
  2039. f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
  2040. break;
  2041. case F2FS_GOING_DOWN_NEED_FSCK:
  2042. set_sbi_flag(sbi, SBI_NEED_FSCK);
  2043. set_sbi_flag(sbi, SBI_CP_DISABLED_QUICK);
  2044. set_sbi_flag(sbi, SBI_IS_DIRTY);
  2045. /* do checkpoint only */
  2046. ret = f2fs_sync_fs(sb, 1);
  2047. if (ret == -EIO)
  2048. ret = 0;
  2049. goto out;
  2050. default:
  2051. ret = -EINVAL;
  2052. goto out;
  2053. }
  2054. if (readonly)
  2055. goto out;
  2056. /*
  2057. * grab sb->s_umount to avoid racing w/ remount() and other shutdown
  2058. * paths.
  2059. */
  2060. if (need_lock)
  2061. down_write(&sbi->sb->s_umount);
  2062. f2fs_stop_gc_thread(sbi);
  2063. f2fs_stop_discard_thread(sbi);
  2064. f2fs_drop_discard_cmd(sbi);
  2065. clear_opt(sbi, DISCARD);
  2066. if (need_lock)
  2067. up_write(&sbi->sb->s_umount);
  2068. f2fs_update_time(sbi, REQ_TIME);
  2069. out:
  2070. trace_f2fs_shutdown(sbi, flag, ret);
  2071. return ret;
  2072. }
  2073. static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
  2074. {
  2075. struct inode *inode = file_inode(filp);
  2076. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2077. __u32 in;
  2078. int ret;
  2079. bool need_drop = false, readonly = false;
  2080. if (!capable(CAP_SYS_ADMIN))
  2081. return -EPERM;
  2082. if (get_user(in, (__u32 __user *)arg))
  2083. return -EFAULT;
  2084. if (in != F2FS_GOING_DOWN_FULLSYNC) {
  2085. ret = mnt_want_write_file(filp);
  2086. if (ret) {
  2087. if (ret != -EROFS)
  2088. return ret;
  2089. /* fallback to nosync shutdown for readonly fs */
  2090. in = F2FS_GOING_DOWN_NOSYNC;
  2091. readonly = true;
  2092. } else {
  2093. need_drop = true;
  2094. }
  2095. }
  2096. ret = f2fs_do_shutdown(sbi, in, readonly, true);
  2097. if (need_drop)
  2098. mnt_drop_write_file(filp);
  2099. return ret;
  2100. }
  2101. static int f2fs_keep_noreuse_range(struct inode *inode,
  2102. loff_t offset, loff_t len)
  2103. {
  2104. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2105. u64 max_bytes = F2FS_BLK_TO_BYTES(max_file_blocks(inode));
  2106. u64 start, end;
  2107. int ret = 0;
  2108. if (!S_ISREG(inode->i_mode))
  2109. return 0;
  2110. if (offset >= max_bytes || len > max_bytes ||
  2111. (offset + len) > max_bytes)
  2112. return 0;
  2113. start = offset >> PAGE_SHIFT;
  2114. end = DIV_ROUND_UP(offset + len, PAGE_SIZE);
  2115. inode_lock(inode);
  2116. if (f2fs_is_atomic_file(inode)) {
  2117. inode_unlock(inode);
  2118. return 0;
  2119. }
  2120. spin_lock(&sbi->inode_lock[DONATE_INODE]);
  2121. /* let's remove the range, if len = 0 */
  2122. if (!len) {
  2123. if (!list_empty(&F2FS_I(inode)->gdonate_list)) {
  2124. list_del_init(&F2FS_I(inode)->gdonate_list);
  2125. sbi->donate_files--;
  2126. if (is_inode_flag_set(inode, FI_DONATE_FINISHED))
  2127. ret = -EALREADY;
  2128. else
  2129. set_inode_flag(inode, FI_DONATE_FINISHED);
  2130. } else
  2131. ret = -ENOENT;
  2132. } else {
  2133. if (list_empty(&F2FS_I(inode)->gdonate_list)) {
  2134. list_add_tail(&F2FS_I(inode)->gdonate_list,
  2135. &sbi->inode_list[DONATE_INODE]);
  2136. sbi->donate_files++;
  2137. } else {
  2138. list_move_tail(&F2FS_I(inode)->gdonate_list,
  2139. &sbi->inode_list[DONATE_INODE]);
  2140. }
  2141. F2FS_I(inode)->donate_start = start;
  2142. F2FS_I(inode)->donate_end = end - 1;
  2143. clear_inode_flag(inode, FI_DONATE_FINISHED);
  2144. }
  2145. spin_unlock(&sbi->inode_lock[DONATE_INODE]);
  2146. inode_unlock(inode);
  2147. return ret;
  2148. }
  2149. static int f2fs_ioc_fitrim(struct file *filp, unsigned long arg)
  2150. {
  2151. struct inode *inode = file_inode(filp);
  2152. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2153. struct fstrim_range range;
  2154. int ret;
  2155. if (!capable(CAP_SYS_ADMIN))
  2156. return -EPERM;
  2157. if (!f2fs_hw_support_discard(sbi))
  2158. return -EOPNOTSUPP;
  2159. if (copy_from_user(&range, (struct fstrim_range __user *)arg,
  2160. sizeof(range)))
  2161. return -EFAULT;
  2162. ret = mnt_want_write_file(filp);
  2163. if (ret)
  2164. return ret;
  2165. range.minlen = max_t(unsigned int, range.minlen,
  2166. f2fs_hw_discard_granularity(sbi));
  2167. ret = f2fs_trim_fs(sbi, &range);
  2168. mnt_drop_write_file(filp);
  2169. if (ret < 0)
  2170. return ret;
  2171. if (copy_to_user((struct fstrim_range __user *)arg, &range,
  2172. sizeof(range)))
  2173. return -EFAULT;
  2174. f2fs_update_time(sbi, REQ_TIME);
  2175. return 0;
  2176. }
  2177. static bool uuid_is_nonzero(__u8 u[16])
  2178. {
  2179. int i;
  2180. for (i = 0; i < 16; i++)
  2181. if (u[i])
  2182. return true;
  2183. return false;
  2184. }
  2185. static int f2fs_ioc_set_encryption_policy(struct file *filp, unsigned long arg)
  2186. {
  2187. struct inode *inode = file_inode(filp);
  2188. int ret;
  2189. if (!f2fs_sb_has_encrypt(F2FS_I_SB(inode)))
  2190. return -EOPNOTSUPP;
  2191. ret = fscrypt_ioctl_set_policy(filp, (const void __user *)arg);
  2192. f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
  2193. return ret;
  2194. }
  2195. static int f2fs_ioc_get_encryption_policy(struct file *filp, unsigned long arg)
  2196. {
  2197. if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
  2198. return -EOPNOTSUPP;
  2199. return fscrypt_ioctl_get_policy(filp, (void __user *)arg);
  2200. }
  2201. static int f2fs_ioc_get_encryption_pwsalt(struct file *filp, unsigned long arg)
  2202. {
  2203. struct inode *inode = file_inode(filp);
  2204. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2205. u8 encrypt_pw_salt[16];
  2206. int err;
  2207. if (!f2fs_sb_has_encrypt(sbi))
  2208. return -EOPNOTSUPP;
  2209. err = mnt_want_write_file(filp);
  2210. if (err)
  2211. return err;
  2212. f2fs_down_write(&sbi->sb_lock);
  2213. if (uuid_is_nonzero(sbi->raw_super->encrypt_pw_salt))
  2214. goto got_it;
  2215. /* update superblock with uuid */
  2216. generate_random_uuid(sbi->raw_super->encrypt_pw_salt);
  2217. err = f2fs_commit_super(sbi, false);
  2218. if (err) {
  2219. /* undo new data */
  2220. memset(sbi->raw_super->encrypt_pw_salt, 0, 16);
  2221. goto out_err;
  2222. }
  2223. got_it:
  2224. memcpy(encrypt_pw_salt, sbi->raw_super->encrypt_pw_salt, 16);
  2225. out_err:
  2226. f2fs_up_write(&sbi->sb_lock);
  2227. mnt_drop_write_file(filp);
  2228. if (!err && copy_to_user((__u8 __user *)arg, encrypt_pw_salt, 16))
  2229. err = -EFAULT;
  2230. return err;
  2231. }
  2232. static int f2fs_ioc_get_encryption_policy_ex(struct file *filp,
  2233. unsigned long arg)
  2234. {
  2235. if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
  2236. return -EOPNOTSUPP;
  2237. return fscrypt_ioctl_get_policy_ex(filp, (void __user *)arg);
  2238. }
  2239. static int f2fs_ioc_add_encryption_key(struct file *filp, unsigned long arg)
  2240. {
  2241. if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
  2242. return -EOPNOTSUPP;
  2243. return fscrypt_ioctl_add_key(filp, (void __user *)arg);
  2244. }
  2245. static int f2fs_ioc_remove_encryption_key(struct file *filp, unsigned long arg)
  2246. {
  2247. if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
  2248. return -EOPNOTSUPP;
  2249. return fscrypt_ioctl_remove_key(filp, (void __user *)arg);
  2250. }
  2251. static int f2fs_ioc_remove_encryption_key_all_users(struct file *filp,
  2252. unsigned long arg)
  2253. {
  2254. if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
  2255. return -EOPNOTSUPP;
  2256. return fscrypt_ioctl_remove_key_all_users(filp, (void __user *)arg);
  2257. }
  2258. static int f2fs_ioc_get_encryption_key_status(struct file *filp,
  2259. unsigned long arg)
  2260. {
  2261. if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
  2262. return -EOPNOTSUPP;
  2263. return fscrypt_ioctl_get_key_status(filp, (void __user *)arg);
  2264. }
  2265. static int f2fs_ioc_get_encryption_nonce(struct file *filp, unsigned long arg)
  2266. {
  2267. if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
  2268. return -EOPNOTSUPP;
  2269. return fscrypt_ioctl_get_nonce(filp, (void __user *)arg);
  2270. }
  2271. static int f2fs_ioc_gc(struct file *filp, unsigned long arg)
  2272. {
  2273. struct inode *inode = file_inode(filp);
  2274. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2275. struct f2fs_gc_control gc_control = { .victim_segno = NULL_SEGNO,
  2276. .no_bg_gc = false,
  2277. .should_migrate_blocks = false,
  2278. .nr_free_secs = 0 };
  2279. __u32 sync;
  2280. int ret;
  2281. if (!capable(CAP_SYS_ADMIN))
  2282. return -EPERM;
  2283. if (get_user(sync, (__u32 __user *)arg))
  2284. return -EFAULT;
  2285. if (f2fs_readonly(sbi->sb))
  2286. return -EROFS;
  2287. ret = mnt_want_write_file(filp);
  2288. if (ret)
  2289. return ret;
  2290. if (!sync) {
  2291. if (!f2fs_down_write_trylock_trace(&sbi->gc_lock,
  2292. &gc_control.lc)) {
  2293. ret = -EBUSY;
  2294. goto out;
  2295. }
  2296. } else {
  2297. f2fs_down_write_trace(&sbi->gc_lock, &gc_control.lc);
  2298. }
  2299. gc_control.init_gc_type = sync ? FG_GC : BG_GC;
  2300. gc_control.err_gc_skipped = sync;
  2301. stat_inc_gc_call_count(sbi, FOREGROUND);
  2302. ret = f2fs_gc(sbi, &gc_control);
  2303. out:
  2304. mnt_drop_write_file(filp);
  2305. return ret;
  2306. }
  2307. static int __f2fs_ioc_gc_range(struct file *filp, struct f2fs_gc_range *range)
  2308. {
  2309. struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
  2310. struct f2fs_gc_control gc_control = {
  2311. .init_gc_type = range->sync ? FG_GC : BG_GC,
  2312. .no_bg_gc = false,
  2313. .should_migrate_blocks = false,
  2314. .err_gc_skipped = range->sync,
  2315. .nr_free_secs = 0 };
  2316. u64 end;
  2317. int ret;
  2318. if (!capable(CAP_SYS_ADMIN))
  2319. return -EPERM;
  2320. if (f2fs_readonly(sbi->sb))
  2321. return -EROFS;
  2322. end = range->start + range->len;
  2323. if (end < range->start || range->start < MAIN_BLKADDR(sbi) ||
  2324. end >= MAX_BLKADDR(sbi))
  2325. return -EINVAL;
  2326. ret = mnt_want_write_file(filp);
  2327. if (ret)
  2328. return ret;
  2329. do_more:
  2330. if (!range->sync) {
  2331. if (!f2fs_down_write_trylock_trace(&sbi->gc_lock, &gc_control.lc)) {
  2332. ret = -EBUSY;
  2333. goto out;
  2334. }
  2335. } else {
  2336. f2fs_down_write_trace(&sbi->gc_lock, &gc_control.lc);
  2337. }
  2338. gc_control.victim_segno = GET_SEGNO(sbi, range->start);
  2339. stat_inc_gc_call_count(sbi, FOREGROUND);
  2340. ret = f2fs_gc(sbi, &gc_control);
  2341. if (ret) {
  2342. if (ret == -EBUSY)
  2343. ret = -EAGAIN;
  2344. goto out;
  2345. }
  2346. range->start += CAP_BLKS_PER_SEC(sbi);
  2347. if (range->start <= end)
  2348. goto do_more;
  2349. out:
  2350. mnt_drop_write_file(filp);
  2351. return ret;
  2352. }
  2353. static int f2fs_ioc_gc_range(struct file *filp, unsigned long arg)
  2354. {
  2355. struct f2fs_gc_range range;
  2356. if (copy_from_user(&range, (struct f2fs_gc_range __user *)arg,
  2357. sizeof(range)))
  2358. return -EFAULT;
  2359. return __f2fs_ioc_gc_range(filp, &range);
  2360. }
  2361. static int f2fs_ioc_write_checkpoint(struct file *filp)
  2362. {
  2363. struct inode *inode = file_inode(filp);
  2364. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2365. int ret;
  2366. if (!capable(CAP_SYS_ADMIN))
  2367. return -EPERM;
  2368. if (f2fs_readonly(sbi->sb))
  2369. return -EROFS;
  2370. if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
  2371. f2fs_info(sbi, "Skipping Checkpoint. Checkpoints currently disabled.");
  2372. return -EINVAL;
  2373. }
  2374. ret = mnt_want_write_file(filp);
  2375. if (ret)
  2376. return ret;
  2377. ret = f2fs_sync_fs(sbi->sb, 1);
  2378. mnt_drop_write_file(filp);
  2379. return ret;
  2380. }
  2381. static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
  2382. struct file *filp,
  2383. struct f2fs_defragment *range)
  2384. {
  2385. struct inode *inode = file_inode(filp);
  2386. struct f2fs_map_blocks map = { .m_next_extent = NULL,
  2387. .m_seg_type = NO_CHECK_TYPE,
  2388. .m_may_create = false };
  2389. struct extent_info ei = {};
  2390. pgoff_t pg_start, pg_end, next_pgofs;
  2391. unsigned int total = 0, sec_num;
  2392. block_t blk_end = 0;
  2393. bool fragmented = false;
  2394. int err;
  2395. f2fs_balance_fs(sbi, true);
  2396. inode_lock(inode);
  2397. pg_start = range->start >> PAGE_SHIFT;
  2398. pg_end = min_t(pgoff_t,
  2399. (range->start + range->len) >> PAGE_SHIFT,
  2400. DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE));
  2401. if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED) ||
  2402. f2fs_is_atomic_file(inode)) {
  2403. err = -EINVAL;
  2404. goto unlock_out;
  2405. }
  2406. /* if in-place-update policy is enabled, don't waste time here */
  2407. set_inode_flag(inode, FI_OPU_WRITE);
  2408. if (f2fs_should_update_inplace(inode, NULL)) {
  2409. err = -EINVAL;
  2410. goto out;
  2411. }
  2412. /* writeback all dirty pages in the range */
  2413. err = filemap_write_and_wait_range(inode->i_mapping,
  2414. pg_start << PAGE_SHIFT,
  2415. (pg_end << PAGE_SHIFT) - 1);
  2416. if (err)
  2417. goto out;
  2418. /*
  2419. * lookup mapping info in extent cache, skip defragmenting if physical
  2420. * block addresses are continuous.
  2421. */
  2422. if (f2fs_lookup_read_extent_cache(inode, pg_start, &ei)) {
  2423. if ((pgoff_t)ei.fofs + ei.len >= pg_end)
  2424. goto out;
  2425. }
  2426. map.m_lblk = pg_start;
  2427. map.m_next_pgofs = &next_pgofs;
  2428. /*
  2429. * lookup mapping info in dnode page cache, skip defragmenting if all
  2430. * physical block addresses are continuous even if there are hole(s)
  2431. * in logical blocks.
  2432. */
  2433. while (map.m_lblk < pg_end) {
  2434. map.m_len = pg_end - map.m_lblk;
  2435. err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DEFAULT);
  2436. if (err)
  2437. goto out;
  2438. if (!(map.m_flags & F2FS_MAP_FLAGS)) {
  2439. map.m_lblk = next_pgofs;
  2440. continue;
  2441. }
  2442. if (blk_end && blk_end != map.m_pblk)
  2443. fragmented = true;
  2444. /* record total count of block that we're going to move */
  2445. total += map.m_len;
  2446. blk_end = map.m_pblk + map.m_len;
  2447. map.m_lblk += map.m_len;
  2448. }
  2449. if (!fragmented) {
  2450. total = 0;
  2451. goto out;
  2452. }
  2453. sec_num = DIV_ROUND_UP(total, CAP_BLKS_PER_SEC(sbi));
  2454. /*
  2455. * make sure there are enough free section for LFS allocation, this can
  2456. * avoid defragment running in SSR mode when free section are allocated
  2457. * intensively
  2458. */
  2459. if (has_not_enough_free_secs(sbi, 0, sec_num)) {
  2460. err = -EAGAIN;
  2461. goto out;
  2462. }
  2463. map.m_lblk = pg_start;
  2464. map.m_len = pg_end - pg_start;
  2465. total = 0;
  2466. while (map.m_lblk < pg_end) {
  2467. pgoff_t idx;
  2468. int cnt = 0;
  2469. do_map:
  2470. map.m_len = pg_end - map.m_lblk;
  2471. err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DEFAULT);
  2472. if (err)
  2473. goto clear_out;
  2474. if (!(map.m_flags & F2FS_MAP_FLAGS)) {
  2475. map.m_lblk = next_pgofs;
  2476. goto check;
  2477. }
  2478. set_inode_flag(inode, FI_SKIP_WRITES);
  2479. idx = map.m_lblk;
  2480. while (idx < map.m_lblk + map.m_len &&
  2481. cnt < BLKS_PER_SEG(sbi)) {
  2482. struct folio *folio;
  2483. folio = f2fs_get_lock_data_folio(inode, idx, true);
  2484. if (IS_ERR(folio)) {
  2485. err = PTR_ERR(folio);
  2486. goto clear_out;
  2487. }
  2488. f2fs_folio_wait_writeback(folio, DATA, true, true);
  2489. folio_mark_dirty(folio);
  2490. folio_set_f2fs_gcing(folio);
  2491. f2fs_folio_put(folio, true);
  2492. idx++;
  2493. cnt++;
  2494. total++;
  2495. }
  2496. map.m_lblk = idx;
  2497. check:
  2498. if (map.m_lblk < pg_end && cnt < BLKS_PER_SEG(sbi))
  2499. goto do_map;
  2500. clear_inode_flag(inode, FI_SKIP_WRITES);
  2501. err = filemap_fdatawrite(inode->i_mapping);
  2502. if (err)
  2503. goto out;
  2504. }
  2505. clear_out:
  2506. clear_inode_flag(inode, FI_SKIP_WRITES);
  2507. out:
  2508. clear_inode_flag(inode, FI_OPU_WRITE);
  2509. unlock_out:
  2510. inode_unlock(inode);
  2511. if (!err)
  2512. range->len = (u64)total << PAGE_SHIFT;
  2513. return err;
  2514. }
  2515. static int f2fs_ioc_defragment(struct file *filp, unsigned long arg)
  2516. {
  2517. struct inode *inode = file_inode(filp);
  2518. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2519. struct f2fs_defragment range;
  2520. int err;
  2521. if (!capable(CAP_SYS_ADMIN))
  2522. return -EPERM;
  2523. if (!S_ISREG(inode->i_mode))
  2524. return -EINVAL;
  2525. if (f2fs_readonly(sbi->sb))
  2526. return -EROFS;
  2527. if (copy_from_user(&range, (struct f2fs_defragment __user *)arg,
  2528. sizeof(range)))
  2529. return -EFAULT;
  2530. /* verify alignment of offset & size */
  2531. if (range.start & (F2FS_BLKSIZE - 1) || range.len & (F2FS_BLKSIZE - 1))
  2532. return -EINVAL;
  2533. if (unlikely((range.start + range.len) >> PAGE_SHIFT >
  2534. max_file_blocks(inode)))
  2535. return -EINVAL;
  2536. err = mnt_want_write_file(filp);
  2537. if (err)
  2538. return err;
  2539. err = f2fs_defragment_range(sbi, filp, &range);
  2540. mnt_drop_write_file(filp);
  2541. if (range.len)
  2542. f2fs_update_time(sbi, REQ_TIME);
  2543. if (err < 0)
  2544. return err;
  2545. if (copy_to_user((struct f2fs_defragment __user *)arg, &range,
  2546. sizeof(range)))
  2547. return -EFAULT;
  2548. return 0;
  2549. }
  2550. static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
  2551. struct file *file_out, loff_t pos_out, size_t len)
  2552. {
  2553. struct inode *src = file_inode(file_in);
  2554. struct inode *dst = file_inode(file_out);
  2555. struct f2fs_sb_info *sbi = F2FS_I_SB(src);
  2556. struct f2fs_lock_context lc;
  2557. size_t olen = len, dst_max_i_size = 0;
  2558. size_t dst_osize;
  2559. int ret;
  2560. if (file_in->f_path.mnt != file_out->f_path.mnt ||
  2561. src->i_sb != dst->i_sb)
  2562. return -EXDEV;
  2563. if (unlikely(f2fs_readonly(src->i_sb)))
  2564. return -EROFS;
  2565. if (!S_ISREG(src->i_mode) || !S_ISREG(dst->i_mode))
  2566. return -EINVAL;
  2567. if (IS_ENCRYPTED(src) || IS_ENCRYPTED(dst))
  2568. return -EOPNOTSUPP;
  2569. if (pos_out < 0 || pos_in < 0)
  2570. return -EINVAL;
  2571. if (src == dst) {
  2572. if (pos_in == pos_out)
  2573. return 0;
  2574. if (pos_out > pos_in && pos_out < pos_in + len)
  2575. return -EINVAL;
  2576. }
  2577. inode_lock(src);
  2578. if (src != dst) {
  2579. ret = -EBUSY;
  2580. if (!inode_trylock(dst))
  2581. goto out;
  2582. }
  2583. if (f2fs_compressed_file(src) || f2fs_compressed_file(dst) ||
  2584. f2fs_is_pinned_file(src) || f2fs_is_pinned_file(dst)) {
  2585. ret = -EOPNOTSUPP;
  2586. goto out_unlock;
  2587. }
  2588. if (f2fs_is_atomic_file(src) || f2fs_is_atomic_file(dst)) {
  2589. ret = -EINVAL;
  2590. goto out_unlock;
  2591. }
  2592. ret = -EINVAL;
  2593. if (pos_in + len > src->i_size || pos_in + len < pos_in)
  2594. goto out_unlock;
  2595. if (len == 0)
  2596. olen = len = src->i_size - pos_in;
  2597. if (pos_in + len == src->i_size)
  2598. len = ALIGN(src->i_size, F2FS_BLKSIZE) - pos_in;
  2599. if (len == 0) {
  2600. ret = 0;
  2601. goto out_unlock;
  2602. }
  2603. dst_osize = dst->i_size;
  2604. if (pos_out + olen > dst->i_size)
  2605. dst_max_i_size = pos_out + olen;
  2606. /* verify the end result is block aligned */
  2607. if (!IS_ALIGNED(pos_in, F2FS_BLKSIZE) ||
  2608. !IS_ALIGNED(pos_in + len, F2FS_BLKSIZE) ||
  2609. !IS_ALIGNED(pos_out, F2FS_BLKSIZE))
  2610. goto out_unlock;
  2611. ret = f2fs_convert_inline_inode(src);
  2612. if (ret)
  2613. goto out_unlock;
  2614. ret = f2fs_convert_inline_inode(dst);
  2615. if (ret)
  2616. goto out_unlock;
  2617. /* write out all dirty pages from offset */
  2618. ret = filemap_write_and_wait_range(src->i_mapping,
  2619. pos_in, pos_in + len);
  2620. if (ret)
  2621. goto out_unlock;
  2622. ret = filemap_write_and_wait_range(dst->i_mapping,
  2623. pos_out, pos_out + len);
  2624. if (ret)
  2625. goto out_unlock;
  2626. f2fs_balance_fs(sbi, true);
  2627. f2fs_down_write(&F2FS_I(src)->i_gc_rwsem[WRITE]);
  2628. if (src != dst) {
  2629. ret = -EBUSY;
  2630. if (!f2fs_down_write_trylock(&F2FS_I(dst)->i_gc_rwsem[WRITE]))
  2631. goto out_src;
  2632. }
  2633. f2fs_lock_op(sbi, &lc);
  2634. ret = __exchange_data_block(src, dst, F2FS_BYTES_TO_BLK(pos_in),
  2635. F2FS_BYTES_TO_BLK(pos_out),
  2636. F2FS_BYTES_TO_BLK(len), false);
  2637. if (!ret) {
  2638. if (dst_max_i_size)
  2639. f2fs_i_size_write(dst, dst_max_i_size);
  2640. else if (dst_osize != dst->i_size)
  2641. f2fs_i_size_write(dst, dst_osize);
  2642. }
  2643. f2fs_unlock_op(sbi, &lc);
  2644. if (src != dst)
  2645. f2fs_up_write(&F2FS_I(dst)->i_gc_rwsem[WRITE]);
  2646. out_src:
  2647. f2fs_up_write(&F2FS_I(src)->i_gc_rwsem[WRITE]);
  2648. if (ret)
  2649. goto out_unlock;
  2650. inode_set_mtime_to_ts(src, inode_set_ctime_current(src));
  2651. f2fs_mark_inode_dirty_sync(src, false);
  2652. if (src != dst) {
  2653. inode_set_mtime_to_ts(dst, inode_set_ctime_current(dst));
  2654. f2fs_mark_inode_dirty_sync(dst, false);
  2655. }
  2656. f2fs_update_time(sbi, REQ_TIME);
  2657. out_unlock:
  2658. if (src != dst)
  2659. inode_unlock(dst);
  2660. out:
  2661. inode_unlock(src);
  2662. return ret;
  2663. }
  2664. static int __f2fs_ioc_move_range(struct file *filp,
  2665. struct f2fs_move_range *range)
  2666. {
  2667. int err;
  2668. if (!(filp->f_mode & FMODE_READ) ||
  2669. !(filp->f_mode & FMODE_WRITE))
  2670. return -EBADF;
  2671. CLASS(fd, dst)(range->dst_fd);
  2672. if (fd_empty(dst))
  2673. return -EBADF;
  2674. if (!(fd_file(dst)->f_mode & FMODE_WRITE))
  2675. return -EBADF;
  2676. err = mnt_want_write_file(filp);
  2677. if (err)
  2678. return err;
  2679. err = f2fs_move_file_range(filp, range->pos_in, fd_file(dst),
  2680. range->pos_out, range->len);
  2681. mnt_drop_write_file(filp);
  2682. return err;
  2683. }
  2684. static int f2fs_ioc_move_range(struct file *filp, unsigned long arg)
  2685. {
  2686. struct f2fs_move_range range;
  2687. if (copy_from_user(&range, (struct f2fs_move_range __user *)arg,
  2688. sizeof(range)))
  2689. return -EFAULT;
  2690. return __f2fs_ioc_move_range(filp, &range);
  2691. }
  2692. static int f2fs_ioc_flush_device(struct file *filp, unsigned long arg)
  2693. {
  2694. struct inode *inode = file_inode(filp);
  2695. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2696. struct sit_info *sm = SIT_I(sbi);
  2697. unsigned int start_segno = 0, end_segno = 0;
  2698. unsigned int dev_start_segno = 0, dev_end_segno = 0;
  2699. struct f2fs_flush_device range;
  2700. struct f2fs_gc_control gc_control = {
  2701. .init_gc_type = FG_GC,
  2702. .should_migrate_blocks = true,
  2703. .err_gc_skipped = true,
  2704. .nr_free_secs = 0 };
  2705. int ret;
  2706. if (!capable(CAP_SYS_ADMIN))
  2707. return -EPERM;
  2708. if (f2fs_readonly(sbi->sb))
  2709. return -EROFS;
  2710. if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
  2711. return -EINVAL;
  2712. if (copy_from_user(&range, (struct f2fs_flush_device __user *)arg,
  2713. sizeof(range)))
  2714. return -EFAULT;
  2715. if (!f2fs_is_multi_device(sbi) || sbi->s_ndevs - 1 <= range.dev_num ||
  2716. __is_large_section(sbi)) {
  2717. f2fs_warn(sbi, "Can't flush %u in %d for SEGS_PER_SEC %u != 1",
  2718. range.dev_num, sbi->s_ndevs, SEGS_PER_SEC(sbi));
  2719. return -EINVAL;
  2720. }
  2721. ret = mnt_want_write_file(filp);
  2722. if (ret)
  2723. return ret;
  2724. if (range.dev_num != 0)
  2725. dev_start_segno = GET_SEGNO(sbi, FDEV(range.dev_num).start_blk);
  2726. dev_end_segno = GET_SEGNO(sbi, FDEV(range.dev_num).end_blk);
  2727. start_segno = sm->last_victim[FLUSH_DEVICE];
  2728. if (start_segno < dev_start_segno || start_segno >= dev_end_segno)
  2729. start_segno = dev_start_segno;
  2730. end_segno = min(start_segno + range.segments, dev_end_segno);
  2731. while (start_segno < end_segno) {
  2732. if (!f2fs_down_write_trylock_trace(&sbi->gc_lock, &gc_control.lc)) {
  2733. ret = -EBUSY;
  2734. goto out;
  2735. }
  2736. sm->last_victim[GC_CB] = end_segno + 1;
  2737. sm->last_victim[GC_GREEDY] = end_segno + 1;
  2738. sm->last_victim[ALLOC_NEXT] = end_segno + 1;
  2739. gc_control.victim_segno = start_segno;
  2740. stat_inc_gc_call_count(sbi, FOREGROUND);
  2741. ret = f2fs_gc(sbi, &gc_control);
  2742. if (ret == -EAGAIN)
  2743. ret = 0;
  2744. else if (ret < 0)
  2745. break;
  2746. start_segno++;
  2747. }
  2748. out:
  2749. mnt_drop_write_file(filp);
  2750. return ret;
  2751. }
  2752. static int f2fs_ioc_get_features(struct file *filp, unsigned long arg)
  2753. {
  2754. struct inode *inode = file_inode(filp);
  2755. u32 sb_feature = le32_to_cpu(F2FS_I_SB(inode)->raw_super->feature);
  2756. /* Must validate to set it with SQLite behavior in Android. */
  2757. sb_feature |= F2FS_FEATURE_ATOMIC_WRITE;
  2758. return put_user(sb_feature, (u32 __user *)arg);
  2759. }
  2760. #ifdef CONFIG_QUOTA
  2761. int f2fs_transfer_project_quota(struct inode *inode, kprojid_t kprojid)
  2762. {
  2763. struct dquot *transfer_to[MAXQUOTAS] = {};
  2764. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2765. struct super_block *sb = sbi->sb;
  2766. int err;
  2767. transfer_to[PRJQUOTA] = dqget(sb, make_kqid_projid(kprojid));
  2768. if (IS_ERR(transfer_to[PRJQUOTA]))
  2769. return PTR_ERR(transfer_to[PRJQUOTA]);
  2770. err = __dquot_transfer(inode, transfer_to);
  2771. if (err)
  2772. set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
  2773. dqput(transfer_to[PRJQUOTA]);
  2774. return err;
  2775. }
  2776. static int f2fs_ioc_setproject(struct inode *inode, __u32 projid)
  2777. {
  2778. struct f2fs_inode_info *fi = F2FS_I(inode);
  2779. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2780. struct f2fs_inode *ri = NULL;
  2781. struct f2fs_lock_context lc;
  2782. kprojid_t kprojid;
  2783. int err;
  2784. if (!f2fs_sb_has_project_quota(sbi)) {
  2785. if (projid != F2FS_DEF_PROJID)
  2786. return -EOPNOTSUPP;
  2787. else
  2788. return 0;
  2789. }
  2790. if (!f2fs_has_extra_attr(inode))
  2791. return -EOPNOTSUPP;
  2792. kprojid = make_kprojid(&init_user_ns, (projid_t)projid);
  2793. if (projid_eq(kprojid, fi->i_projid))
  2794. return 0;
  2795. err = -EPERM;
  2796. /* Is it quota file? Do not allow user to mess with it */
  2797. if (IS_NOQUOTA(inode))
  2798. return err;
  2799. if (!F2FS_FITS_IN_INODE(ri, fi->i_extra_isize, i_projid))
  2800. return -EOVERFLOW;
  2801. err = f2fs_dquot_initialize(inode);
  2802. if (err)
  2803. return err;
  2804. f2fs_lock_op(sbi, &lc);
  2805. err = f2fs_transfer_project_quota(inode, kprojid);
  2806. if (err)
  2807. goto out_unlock;
  2808. fi->i_projid = kprojid;
  2809. inode_set_ctime_current(inode);
  2810. f2fs_mark_inode_dirty_sync(inode, true);
  2811. out_unlock:
  2812. f2fs_unlock_op(sbi, &lc);
  2813. return err;
  2814. }
  2815. #else
  2816. int f2fs_transfer_project_quota(struct inode *inode, kprojid_t kprojid)
  2817. {
  2818. return 0;
  2819. }
  2820. static int f2fs_ioc_setproject(struct inode *inode, __u32 projid)
  2821. {
  2822. if (projid != F2FS_DEF_PROJID)
  2823. return -EOPNOTSUPP;
  2824. return 0;
  2825. }
  2826. #endif
  2827. int f2fs_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
  2828. {
  2829. struct inode *inode = d_inode(dentry);
  2830. struct f2fs_inode_info *fi = F2FS_I(inode);
  2831. u32 fsflags = f2fs_iflags_to_fsflags(fi->i_flags);
  2832. if (IS_ENCRYPTED(inode))
  2833. fsflags |= FS_ENCRYPT_FL;
  2834. if (IS_VERITY(inode))
  2835. fsflags |= FS_VERITY_FL;
  2836. if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
  2837. fsflags |= FS_INLINE_DATA_FL;
  2838. if (is_inode_flag_set(inode, FI_PIN_FILE))
  2839. fsflags |= FS_NOCOW_FL;
  2840. fileattr_fill_flags(fa, fsflags & F2FS_GETTABLE_FS_FL);
  2841. if (f2fs_sb_has_project_quota(F2FS_I_SB(inode)))
  2842. fa->fsx_projid = from_kprojid(&init_user_ns, fi->i_projid);
  2843. return 0;
  2844. }
  2845. int f2fs_fileattr_set(struct mnt_idmap *idmap,
  2846. struct dentry *dentry, struct file_kattr *fa)
  2847. {
  2848. struct inode *inode = d_inode(dentry);
  2849. u32 fsflags = fa->flags, mask = F2FS_SETTABLE_FS_FL;
  2850. u32 iflags;
  2851. int err;
  2852. if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
  2853. return -EIO;
  2854. if (!f2fs_is_checkpoint_ready(F2FS_I_SB(inode)))
  2855. return -ENOSPC;
  2856. if (fsflags & ~F2FS_GETTABLE_FS_FL)
  2857. return -EOPNOTSUPP;
  2858. fsflags &= F2FS_SETTABLE_FS_FL;
  2859. if (!fa->flags_valid)
  2860. mask &= FS_COMMON_FL;
  2861. iflags = f2fs_fsflags_to_iflags(fsflags);
  2862. if (f2fs_mask_flags(inode->i_mode, iflags) != iflags)
  2863. return -EOPNOTSUPP;
  2864. err = f2fs_setflags_common(inode, iflags, f2fs_fsflags_to_iflags(mask));
  2865. if (!err)
  2866. err = f2fs_ioc_setproject(inode, fa->fsx_projid);
  2867. return err;
  2868. }
  2869. int f2fs_pin_file_control(struct inode *inode, bool inc)
  2870. {
  2871. struct f2fs_inode_info *fi = F2FS_I(inode);
  2872. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2873. if (IS_DEVICE_ALIASING(inode))
  2874. return -EINVAL;
  2875. if (fi->i_gc_failures >= sbi->gc_pin_file_threshold) {
  2876. f2fs_warn(sbi, "%s: Enable GC = ino %lx after %x GC trials",
  2877. __func__, inode->i_ino, fi->i_gc_failures);
  2878. clear_inode_flag(inode, FI_PIN_FILE);
  2879. return -EAGAIN;
  2880. }
  2881. /* Use i_gc_failures for normal file as a risk signal. */
  2882. if (inc)
  2883. f2fs_i_gc_failures_write(inode, fi->i_gc_failures + 1);
  2884. return 0;
  2885. }
  2886. static int f2fs_ioc_set_pin_file(struct file *filp, unsigned long arg)
  2887. {
  2888. struct inode *inode = file_inode(filp);
  2889. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  2890. __u32 pin;
  2891. int ret = 0;
  2892. if (get_user(pin, (__u32 __user *)arg))
  2893. return -EFAULT;
  2894. if (!S_ISREG(inode->i_mode))
  2895. return -EINVAL;
  2896. if (f2fs_readonly(sbi->sb))
  2897. return -EROFS;
  2898. if (!pin && IS_DEVICE_ALIASING(inode))
  2899. return -EOPNOTSUPP;
  2900. ret = mnt_want_write_file(filp);
  2901. if (ret)
  2902. return ret;
  2903. inode_lock(inode);
  2904. if (f2fs_is_atomic_file(inode)) {
  2905. ret = -EINVAL;
  2906. goto out;
  2907. }
  2908. if (!pin) {
  2909. clear_inode_flag(inode, FI_PIN_FILE);
  2910. f2fs_i_gc_failures_write(inode, 0);
  2911. goto done;
  2912. } else if (f2fs_is_pinned_file(inode)) {
  2913. goto done;
  2914. }
  2915. if (F2FS_HAS_BLOCKS(inode)) {
  2916. ret = -EFBIG;
  2917. goto out;
  2918. }
  2919. /* Let's allow file pinning on zoned device. */
  2920. if (!f2fs_sb_has_blkzoned(sbi) &&
  2921. f2fs_should_update_outplace(inode, NULL)) {
  2922. ret = -EINVAL;
  2923. goto out;
  2924. }
  2925. if (f2fs_pin_file_control(inode, false)) {
  2926. ret = -EAGAIN;
  2927. goto out;
  2928. }
  2929. ret = f2fs_convert_inline_inode(inode);
  2930. if (ret)
  2931. goto out;
  2932. if (!f2fs_disable_compressed_file(inode)) {
  2933. ret = -EOPNOTSUPP;
  2934. goto out;
  2935. }
  2936. set_inode_flag(inode, FI_PIN_FILE);
  2937. ret = F2FS_I(inode)->i_gc_failures;
  2938. done:
  2939. f2fs_update_time(sbi, REQ_TIME);
  2940. out:
  2941. inode_unlock(inode);
  2942. mnt_drop_write_file(filp);
  2943. return ret;
  2944. }
  2945. static int f2fs_ioc_get_pin_file(struct file *filp, unsigned long arg)
  2946. {
  2947. struct inode *inode = file_inode(filp);
  2948. __u32 pin = 0;
  2949. if (is_inode_flag_set(inode, FI_PIN_FILE))
  2950. pin = F2FS_I(inode)->i_gc_failures;
  2951. return put_user(pin, (u32 __user *)arg);
  2952. }
  2953. static int f2fs_ioc_get_dev_alias_file(struct file *filp, unsigned long arg)
  2954. {
  2955. return put_user(IS_DEVICE_ALIASING(file_inode(filp)) ? 1 : 0,
  2956. (u32 __user *)arg);
  2957. }
  2958. static int f2fs_ioc_io_prio(struct file *filp, unsigned long arg)
  2959. {
  2960. struct inode *inode = file_inode(filp);
  2961. __u32 level;
  2962. if (get_user(level, (__u32 __user *)arg))
  2963. return -EFAULT;
  2964. if (!S_ISREG(inode->i_mode) || level >= F2FS_IOPRIO_MAX)
  2965. return -EINVAL;
  2966. inode_lock(inode);
  2967. F2FS_I(inode)->ioprio_hint = level;
  2968. inode_unlock(inode);
  2969. return 0;
  2970. }
  2971. int f2fs_precache_extents(struct inode *inode)
  2972. {
  2973. struct f2fs_inode_info *fi = F2FS_I(inode);
  2974. struct f2fs_map_blocks map;
  2975. pgoff_t m_next_extent;
  2976. loff_t end;
  2977. int err;
  2978. if (is_inode_flag_set(inode, FI_NO_EXTENT))
  2979. return -EOPNOTSUPP;
  2980. map.m_lblk = 0;
  2981. map.m_pblk = 0;
  2982. map.m_next_pgofs = NULL;
  2983. map.m_next_extent = &m_next_extent;
  2984. map.m_seg_type = NO_CHECK_TYPE;
  2985. map.m_may_create = false;
  2986. end = F2FS_BLK_ALIGN(i_size_read(inode));
  2987. while (map.m_lblk < end) {
  2988. map.m_len = end - map.m_lblk;
  2989. f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
  2990. err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_PRECACHE);
  2991. f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
  2992. if (err || !map.m_len)
  2993. return err;
  2994. map.m_lblk = m_next_extent;
  2995. }
  2996. return 0;
  2997. }
  2998. static int f2fs_ioc_precache_extents(struct file *filp)
  2999. {
  3000. return f2fs_precache_extents(file_inode(filp));
  3001. }
  3002. static int f2fs_ioc_resize_fs(struct file *filp, unsigned long arg)
  3003. {
  3004. struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
  3005. __u64 block_count;
  3006. if (!capable(CAP_SYS_ADMIN))
  3007. return -EPERM;
  3008. if (f2fs_readonly(sbi->sb))
  3009. return -EROFS;
  3010. if (copy_from_user(&block_count, (void __user *)arg,
  3011. sizeof(block_count)))
  3012. return -EFAULT;
  3013. return f2fs_resize_fs(filp, block_count);
  3014. }
  3015. static int f2fs_ioc_enable_verity(struct file *filp, unsigned long arg)
  3016. {
  3017. struct inode *inode = file_inode(filp);
  3018. f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
  3019. if (!f2fs_sb_has_verity(F2FS_I_SB(inode))) {
  3020. f2fs_warn(F2FS_I_SB(inode),
  3021. "Can't enable fs-verity on inode %lu: the verity feature is not enabled on this filesystem",
  3022. inode->i_ino);
  3023. return -EOPNOTSUPP;
  3024. }
  3025. return fsverity_ioctl_enable(filp, (const void __user *)arg);
  3026. }
  3027. static int f2fs_ioc_measure_verity(struct file *filp, unsigned long arg)
  3028. {
  3029. if (!f2fs_sb_has_verity(F2FS_I_SB(file_inode(filp))))
  3030. return -EOPNOTSUPP;
  3031. return fsverity_ioctl_measure(filp, (void __user *)arg);
  3032. }
  3033. static int f2fs_ioc_read_verity_metadata(struct file *filp, unsigned long arg)
  3034. {
  3035. if (!f2fs_sb_has_verity(F2FS_I_SB(file_inode(filp))))
  3036. return -EOPNOTSUPP;
  3037. return fsverity_ioctl_read_metadata(filp, (const void __user *)arg);
  3038. }
  3039. static int f2fs_ioc_getfslabel(struct file *filp, unsigned long arg)
  3040. {
  3041. struct inode *inode = file_inode(filp);
  3042. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3043. char *vbuf;
  3044. int count;
  3045. int err = 0;
  3046. vbuf = f2fs_kzalloc(sbi, MAX_VOLUME_NAME, GFP_KERNEL);
  3047. if (!vbuf)
  3048. return -ENOMEM;
  3049. f2fs_down_read(&sbi->sb_lock);
  3050. count = utf16s_to_utf8s(sbi->raw_super->volume_name,
  3051. ARRAY_SIZE(sbi->raw_super->volume_name),
  3052. UTF16_LITTLE_ENDIAN, vbuf, MAX_VOLUME_NAME);
  3053. f2fs_up_read(&sbi->sb_lock);
  3054. if (copy_to_user((char __user *)arg, vbuf,
  3055. min(FSLABEL_MAX, count)))
  3056. err = -EFAULT;
  3057. kfree(vbuf);
  3058. return err;
  3059. }
  3060. static int f2fs_ioc_setfslabel(struct file *filp, unsigned long arg)
  3061. {
  3062. struct inode *inode = file_inode(filp);
  3063. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3064. char *vbuf;
  3065. int err = 0;
  3066. if (!capable(CAP_SYS_ADMIN))
  3067. return -EPERM;
  3068. vbuf = strndup_user((const char __user *)arg, FSLABEL_MAX);
  3069. if (IS_ERR(vbuf))
  3070. return PTR_ERR(vbuf);
  3071. err = mnt_want_write_file(filp);
  3072. if (err)
  3073. goto out;
  3074. f2fs_down_write(&sbi->sb_lock);
  3075. memset(sbi->raw_super->volume_name, 0,
  3076. sizeof(sbi->raw_super->volume_name));
  3077. utf8s_to_utf16s(vbuf, strlen(vbuf), UTF16_LITTLE_ENDIAN,
  3078. sbi->raw_super->volume_name,
  3079. ARRAY_SIZE(sbi->raw_super->volume_name));
  3080. err = f2fs_commit_super(sbi, false);
  3081. f2fs_up_write(&sbi->sb_lock);
  3082. mnt_drop_write_file(filp);
  3083. out:
  3084. kfree(vbuf);
  3085. return err;
  3086. }
  3087. static int f2fs_get_compress_blocks(struct inode *inode, __u64 *blocks)
  3088. {
  3089. if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
  3090. return -EOPNOTSUPP;
  3091. if (!f2fs_compressed_file(inode))
  3092. return -EINVAL;
  3093. *blocks = atomic_read(&F2FS_I(inode)->i_compr_blocks);
  3094. return 0;
  3095. }
  3096. static int f2fs_ioc_get_compress_blocks(struct file *filp, unsigned long arg)
  3097. {
  3098. struct inode *inode = file_inode(filp);
  3099. __u64 blocks;
  3100. int ret;
  3101. ret = f2fs_get_compress_blocks(inode, &blocks);
  3102. if (ret < 0)
  3103. return ret;
  3104. return put_user(blocks, (u64 __user *)arg);
  3105. }
  3106. static int release_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
  3107. {
  3108. struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
  3109. unsigned int released_blocks = 0;
  3110. int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
  3111. block_t blkaddr;
  3112. int i;
  3113. for (i = 0; i < count; i++) {
  3114. blkaddr = data_blkaddr(dn->inode, dn->node_folio,
  3115. dn->ofs_in_node + i);
  3116. if (!__is_valid_data_blkaddr(blkaddr))
  3117. continue;
  3118. if (unlikely(!f2fs_is_valid_blkaddr(sbi, blkaddr,
  3119. DATA_GENERIC_ENHANCE)))
  3120. return -EFSCORRUPTED;
  3121. }
  3122. while (count) {
  3123. int compr_blocks = 0;
  3124. for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
  3125. blkaddr = f2fs_data_blkaddr(dn);
  3126. if (i == 0) {
  3127. if (blkaddr == COMPRESS_ADDR)
  3128. continue;
  3129. dn->ofs_in_node += cluster_size;
  3130. goto next;
  3131. }
  3132. if (__is_valid_data_blkaddr(blkaddr))
  3133. compr_blocks++;
  3134. if (blkaddr != NEW_ADDR)
  3135. continue;
  3136. f2fs_set_data_blkaddr(dn, NULL_ADDR);
  3137. }
  3138. f2fs_i_compr_blocks_update(dn->inode, compr_blocks, false);
  3139. dec_valid_block_count(sbi, dn->inode,
  3140. cluster_size - compr_blocks);
  3141. released_blocks += cluster_size - compr_blocks;
  3142. next:
  3143. count -= cluster_size;
  3144. }
  3145. return released_blocks;
  3146. }
  3147. static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg)
  3148. {
  3149. struct inode *inode = file_inode(filp);
  3150. struct f2fs_inode_info *fi = F2FS_I(inode);
  3151. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3152. struct f2fs_lock_context lc;
  3153. pgoff_t page_idx = 0, last_idx;
  3154. unsigned int released_blocks = 0;
  3155. int ret;
  3156. int writecount;
  3157. if (!f2fs_sb_has_compression(sbi))
  3158. return -EOPNOTSUPP;
  3159. if (f2fs_readonly(sbi->sb))
  3160. return -EROFS;
  3161. ret = mnt_want_write_file(filp);
  3162. if (ret)
  3163. return ret;
  3164. f2fs_balance_fs(sbi, true);
  3165. inode_lock(inode);
  3166. writecount = atomic_read(&inode->i_writecount);
  3167. if ((filp->f_mode & FMODE_WRITE && writecount != 1) ||
  3168. (!(filp->f_mode & FMODE_WRITE) && writecount)) {
  3169. ret = -EBUSY;
  3170. goto out;
  3171. }
  3172. if (!f2fs_compressed_file(inode) ||
  3173. is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
  3174. ret = -EINVAL;
  3175. goto out;
  3176. }
  3177. ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
  3178. if (ret)
  3179. goto out;
  3180. if (!atomic_read(&fi->i_compr_blocks)) {
  3181. ret = -EPERM;
  3182. goto out;
  3183. }
  3184. set_inode_flag(inode, FI_COMPRESS_RELEASED);
  3185. inode_set_ctime_current(inode);
  3186. f2fs_mark_inode_dirty_sync(inode, true);
  3187. f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
  3188. filemap_invalidate_lock(inode->i_mapping);
  3189. last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
  3190. while (page_idx < last_idx) {
  3191. struct dnode_of_data dn;
  3192. pgoff_t end_offset, count;
  3193. f2fs_lock_op(sbi, &lc);
  3194. set_new_dnode(&dn, inode, NULL, NULL, 0);
  3195. ret = f2fs_get_dnode_of_data(&dn, page_idx, LOOKUP_NODE);
  3196. if (ret) {
  3197. f2fs_unlock_op(sbi, &lc);
  3198. if (ret == -ENOENT) {
  3199. page_idx = f2fs_get_next_page_offset(&dn,
  3200. page_idx);
  3201. ret = 0;
  3202. continue;
  3203. }
  3204. break;
  3205. }
  3206. end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
  3207. count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
  3208. count = round_up(count, fi->i_cluster_size);
  3209. ret = release_compress_blocks(&dn, count);
  3210. f2fs_put_dnode(&dn);
  3211. f2fs_unlock_op(sbi, &lc);
  3212. if (ret < 0)
  3213. break;
  3214. page_idx += count;
  3215. released_blocks += ret;
  3216. }
  3217. filemap_invalidate_unlock(inode->i_mapping);
  3218. f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
  3219. out:
  3220. if (released_blocks)
  3221. f2fs_update_time(sbi, REQ_TIME);
  3222. inode_unlock(inode);
  3223. mnt_drop_write_file(filp);
  3224. if (ret >= 0) {
  3225. ret = put_user(released_blocks, (u64 __user *)arg);
  3226. } else if (released_blocks &&
  3227. atomic_read(&fi->i_compr_blocks)) {
  3228. set_sbi_flag(sbi, SBI_NEED_FSCK);
  3229. f2fs_warn(sbi, "%s: partial blocks were released i_ino=%lx "
  3230. "iblocks=%llu, released=%u, compr_blocks=%u, "
  3231. "run fsck to fix.",
  3232. __func__, inode->i_ino, inode->i_blocks,
  3233. released_blocks,
  3234. atomic_read(&fi->i_compr_blocks));
  3235. }
  3236. return ret;
  3237. }
  3238. static int reserve_compress_blocks(struct dnode_of_data *dn, pgoff_t count,
  3239. unsigned int *reserved_blocks)
  3240. {
  3241. struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
  3242. int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
  3243. block_t blkaddr;
  3244. int i;
  3245. for (i = 0; i < count; i++) {
  3246. blkaddr = data_blkaddr(dn->inode, dn->node_folio,
  3247. dn->ofs_in_node + i);
  3248. if (!__is_valid_data_blkaddr(blkaddr))
  3249. continue;
  3250. if (unlikely(!f2fs_is_valid_blkaddr(sbi, blkaddr,
  3251. DATA_GENERIC_ENHANCE)))
  3252. return -EFSCORRUPTED;
  3253. }
  3254. while (count) {
  3255. int compr_blocks = 0;
  3256. blkcnt_t reserved = 0;
  3257. blkcnt_t to_reserved;
  3258. int ret;
  3259. for (i = 0; i < cluster_size; i++) {
  3260. blkaddr = data_blkaddr(dn->inode, dn->node_folio,
  3261. dn->ofs_in_node + i);
  3262. if (i == 0) {
  3263. if (blkaddr != COMPRESS_ADDR) {
  3264. dn->ofs_in_node += cluster_size;
  3265. goto next;
  3266. }
  3267. continue;
  3268. }
  3269. /*
  3270. * compressed cluster was not released due to it
  3271. * fails in release_compress_blocks(), so NEW_ADDR
  3272. * is a possible case.
  3273. */
  3274. if (blkaddr == NEW_ADDR) {
  3275. reserved++;
  3276. continue;
  3277. }
  3278. if (__is_valid_data_blkaddr(blkaddr)) {
  3279. compr_blocks++;
  3280. continue;
  3281. }
  3282. }
  3283. to_reserved = cluster_size - compr_blocks - reserved;
  3284. /* for the case all blocks in cluster were reserved */
  3285. if (reserved && to_reserved == 1) {
  3286. dn->ofs_in_node += cluster_size;
  3287. goto next;
  3288. }
  3289. ret = inc_valid_block_count(sbi, dn->inode,
  3290. &to_reserved, false);
  3291. if (unlikely(ret))
  3292. return ret;
  3293. for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
  3294. if (f2fs_data_blkaddr(dn) == NULL_ADDR)
  3295. f2fs_set_data_blkaddr(dn, NEW_ADDR);
  3296. }
  3297. f2fs_i_compr_blocks_update(dn->inode, compr_blocks, true);
  3298. *reserved_blocks += to_reserved;
  3299. next:
  3300. count -= cluster_size;
  3301. }
  3302. return 0;
  3303. }
  3304. static int f2fs_reserve_compress_blocks(struct file *filp, unsigned long arg)
  3305. {
  3306. struct inode *inode = file_inode(filp);
  3307. struct f2fs_inode_info *fi = F2FS_I(inode);
  3308. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3309. pgoff_t page_idx = 0, last_idx;
  3310. unsigned int reserved_blocks = 0;
  3311. int ret;
  3312. if (!f2fs_sb_has_compression(sbi))
  3313. return -EOPNOTSUPP;
  3314. if (f2fs_readonly(sbi->sb))
  3315. return -EROFS;
  3316. ret = mnt_want_write_file(filp);
  3317. if (ret)
  3318. return ret;
  3319. f2fs_balance_fs(sbi, true);
  3320. inode_lock(inode);
  3321. if (!f2fs_compressed_file(inode) ||
  3322. !is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
  3323. ret = -EINVAL;
  3324. goto unlock_inode;
  3325. }
  3326. if (atomic_read(&fi->i_compr_blocks))
  3327. goto unlock_inode;
  3328. f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
  3329. filemap_invalidate_lock(inode->i_mapping);
  3330. last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
  3331. while (page_idx < last_idx) {
  3332. struct dnode_of_data dn;
  3333. struct f2fs_lock_context lc;
  3334. pgoff_t end_offset, count;
  3335. f2fs_lock_op(sbi, &lc);
  3336. set_new_dnode(&dn, inode, NULL, NULL, 0);
  3337. ret = f2fs_get_dnode_of_data(&dn, page_idx, LOOKUP_NODE);
  3338. if (ret) {
  3339. f2fs_unlock_op(sbi, &lc);
  3340. if (ret == -ENOENT) {
  3341. page_idx = f2fs_get_next_page_offset(&dn,
  3342. page_idx);
  3343. ret = 0;
  3344. continue;
  3345. }
  3346. break;
  3347. }
  3348. end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
  3349. count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
  3350. count = round_up(count, fi->i_cluster_size);
  3351. ret = reserve_compress_blocks(&dn, count, &reserved_blocks);
  3352. f2fs_put_dnode(&dn);
  3353. f2fs_unlock_op(sbi, &lc);
  3354. if (ret < 0)
  3355. break;
  3356. page_idx += count;
  3357. }
  3358. filemap_invalidate_unlock(inode->i_mapping);
  3359. f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
  3360. if (!ret) {
  3361. clear_inode_flag(inode, FI_COMPRESS_RELEASED);
  3362. inode_set_ctime_current(inode);
  3363. f2fs_mark_inode_dirty_sync(inode, true);
  3364. }
  3365. unlock_inode:
  3366. if (reserved_blocks)
  3367. f2fs_update_time(sbi, REQ_TIME);
  3368. inode_unlock(inode);
  3369. mnt_drop_write_file(filp);
  3370. if (!ret) {
  3371. ret = put_user(reserved_blocks, (u64 __user *)arg);
  3372. } else if (reserved_blocks &&
  3373. atomic_read(&fi->i_compr_blocks)) {
  3374. set_sbi_flag(sbi, SBI_NEED_FSCK);
  3375. f2fs_warn(sbi, "%s: partial blocks were reserved i_ino=%lx "
  3376. "iblocks=%llu, reserved=%u, compr_blocks=%u, "
  3377. "run fsck to fix.",
  3378. __func__, inode->i_ino, inode->i_blocks,
  3379. reserved_blocks,
  3380. atomic_read(&fi->i_compr_blocks));
  3381. }
  3382. return ret;
  3383. }
  3384. static int f2fs_secure_erase(struct block_device *bdev, struct inode *inode,
  3385. pgoff_t off, block_t block, block_t len, u32 flags)
  3386. {
  3387. sector_t sector = SECTOR_FROM_BLOCK(block);
  3388. sector_t nr_sects = SECTOR_FROM_BLOCK(len);
  3389. int ret = 0;
  3390. if (flags & F2FS_TRIM_FILE_DISCARD) {
  3391. if (bdev_max_secure_erase_sectors(bdev))
  3392. ret = blkdev_issue_secure_erase(bdev, sector, nr_sects,
  3393. GFP_NOFS);
  3394. else
  3395. ret = blkdev_issue_discard(bdev, sector, nr_sects,
  3396. GFP_NOFS);
  3397. }
  3398. if (!ret && (flags & F2FS_TRIM_FILE_ZEROOUT)) {
  3399. if (IS_ENCRYPTED(inode))
  3400. ret = fscrypt_zeroout_range(inode, off, block, len);
  3401. else
  3402. ret = blkdev_issue_zeroout(bdev, sector, nr_sects,
  3403. GFP_NOFS, 0);
  3404. }
  3405. return ret;
  3406. }
  3407. static int f2fs_sec_trim_file(struct file *filp, unsigned long arg)
  3408. {
  3409. struct inode *inode = file_inode(filp);
  3410. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3411. struct address_space *mapping = inode->i_mapping;
  3412. struct block_device *prev_bdev = NULL;
  3413. struct f2fs_sectrim_range range;
  3414. pgoff_t index, pg_end, prev_index = 0;
  3415. block_t prev_block = 0, len = 0;
  3416. loff_t end_addr;
  3417. bool to_end = false;
  3418. int ret = 0;
  3419. if (!(filp->f_mode & FMODE_WRITE))
  3420. return -EBADF;
  3421. if (copy_from_user(&range, (struct f2fs_sectrim_range __user *)arg,
  3422. sizeof(range)))
  3423. return -EFAULT;
  3424. if (range.flags == 0 || (range.flags & ~F2FS_TRIM_FILE_MASK) ||
  3425. !S_ISREG(inode->i_mode))
  3426. return -EINVAL;
  3427. if (((range.flags & F2FS_TRIM_FILE_DISCARD) &&
  3428. !f2fs_hw_support_discard(sbi)) ||
  3429. ((range.flags & F2FS_TRIM_FILE_ZEROOUT) &&
  3430. IS_ENCRYPTED(inode) && f2fs_is_multi_device(sbi)))
  3431. return -EOPNOTSUPP;
  3432. ret = mnt_want_write_file(filp);
  3433. if (ret)
  3434. return ret;
  3435. inode_lock(inode);
  3436. if (f2fs_is_atomic_file(inode) || f2fs_compressed_file(inode) ||
  3437. range.start >= inode->i_size) {
  3438. ret = -EINVAL;
  3439. goto err;
  3440. }
  3441. if (range.len == 0)
  3442. goto err;
  3443. if (inode->i_size - range.start > range.len) {
  3444. end_addr = range.start + range.len;
  3445. } else {
  3446. end_addr = range.len == (u64)-1 ?
  3447. sbi->sb->s_maxbytes : inode->i_size;
  3448. to_end = true;
  3449. }
  3450. if (!IS_ALIGNED(range.start, F2FS_BLKSIZE) ||
  3451. (!to_end && !IS_ALIGNED(end_addr, F2FS_BLKSIZE))) {
  3452. ret = -EINVAL;
  3453. goto err;
  3454. }
  3455. index = F2FS_BYTES_TO_BLK(range.start);
  3456. pg_end = DIV_ROUND_UP(end_addr, F2FS_BLKSIZE);
  3457. ret = f2fs_convert_inline_inode(inode);
  3458. if (ret)
  3459. goto err;
  3460. f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  3461. filemap_invalidate_lock(mapping);
  3462. ret = filemap_write_and_wait_range(mapping, range.start,
  3463. to_end ? LLONG_MAX : end_addr - 1);
  3464. if (ret)
  3465. goto out;
  3466. truncate_inode_pages_range(mapping, range.start,
  3467. to_end ? -1 : end_addr - 1);
  3468. while (index < pg_end) {
  3469. struct dnode_of_data dn;
  3470. pgoff_t end_offset, count;
  3471. int i;
  3472. set_new_dnode(&dn, inode, NULL, NULL, 0);
  3473. ret = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
  3474. if (ret) {
  3475. if (ret == -ENOENT) {
  3476. index = f2fs_get_next_page_offset(&dn, index);
  3477. continue;
  3478. }
  3479. goto out;
  3480. }
  3481. end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
  3482. count = min(end_offset - dn.ofs_in_node, pg_end - index);
  3483. for (i = 0; i < count; i++, index++, dn.ofs_in_node++) {
  3484. struct block_device *cur_bdev;
  3485. block_t blkaddr = f2fs_data_blkaddr(&dn);
  3486. if (!__is_valid_data_blkaddr(blkaddr))
  3487. continue;
  3488. if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
  3489. DATA_GENERIC_ENHANCE)) {
  3490. ret = -EFSCORRUPTED;
  3491. f2fs_put_dnode(&dn);
  3492. goto out;
  3493. }
  3494. cur_bdev = f2fs_target_device(sbi, blkaddr, NULL);
  3495. if (f2fs_is_multi_device(sbi)) {
  3496. int di = f2fs_target_device_index(sbi, blkaddr);
  3497. blkaddr -= FDEV(di).start_blk;
  3498. }
  3499. if (len) {
  3500. if (prev_bdev == cur_bdev &&
  3501. index == prev_index + len &&
  3502. blkaddr == prev_block + len) {
  3503. len++;
  3504. } else {
  3505. ret = f2fs_secure_erase(prev_bdev,
  3506. inode, prev_index, prev_block,
  3507. len, range.flags);
  3508. if (ret) {
  3509. f2fs_put_dnode(&dn);
  3510. goto out;
  3511. }
  3512. len = 0;
  3513. }
  3514. }
  3515. if (!len) {
  3516. prev_bdev = cur_bdev;
  3517. prev_index = index;
  3518. prev_block = blkaddr;
  3519. len = 1;
  3520. }
  3521. }
  3522. f2fs_put_dnode(&dn);
  3523. if (fatal_signal_pending(current)) {
  3524. ret = -EINTR;
  3525. goto out;
  3526. }
  3527. cond_resched();
  3528. }
  3529. if (len)
  3530. ret = f2fs_secure_erase(prev_bdev, inode, prev_index,
  3531. prev_block, len, range.flags);
  3532. f2fs_update_time(sbi, REQ_TIME);
  3533. out:
  3534. filemap_invalidate_unlock(mapping);
  3535. f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  3536. err:
  3537. inode_unlock(inode);
  3538. mnt_drop_write_file(filp);
  3539. return ret;
  3540. }
  3541. static int f2fs_ioc_get_compress_option(struct file *filp, unsigned long arg)
  3542. {
  3543. struct inode *inode = file_inode(filp);
  3544. struct f2fs_comp_option option;
  3545. if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
  3546. return -EOPNOTSUPP;
  3547. inode_lock_shared(inode);
  3548. if (!f2fs_compressed_file(inode)) {
  3549. inode_unlock_shared(inode);
  3550. return -ENODATA;
  3551. }
  3552. option.algorithm = F2FS_I(inode)->i_compress_algorithm;
  3553. option.log_cluster_size = F2FS_I(inode)->i_log_cluster_size;
  3554. inode_unlock_shared(inode);
  3555. if (copy_to_user((struct f2fs_comp_option __user *)arg, &option,
  3556. sizeof(option)))
  3557. return -EFAULT;
  3558. return 0;
  3559. }
  3560. static int f2fs_ioc_set_compress_option(struct file *filp, unsigned long arg)
  3561. {
  3562. struct inode *inode = file_inode(filp);
  3563. struct f2fs_inode_info *fi = F2FS_I(inode);
  3564. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3565. struct f2fs_comp_option option;
  3566. int ret = 0;
  3567. if (!f2fs_sb_has_compression(sbi))
  3568. return -EOPNOTSUPP;
  3569. if (!(filp->f_mode & FMODE_WRITE))
  3570. return -EBADF;
  3571. if (copy_from_user(&option, (struct f2fs_comp_option __user *)arg,
  3572. sizeof(option)))
  3573. return -EFAULT;
  3574. if (option.log_cluster_size < MIN_COMPRESS_LOG_SIZE ||
  3575. option.log_cluster_size > MAX_COMPRESS_LOG_SIZE ||
  3576. option.algorithm >= COMPRESS_MAX)
  3577. return -EINVAL;
  3578. ret = mnt_want_write_file(filp);
  3579. if (ret)
  3580. return ret;
  3581. inode_lock(inode);
  3582. f2fs_down_write(&F2FS_I(inode)->i_sem);
  3583. if (!f2fs_compressed_file(inode)) {
  3584. ret = -EINVAL;
  3585. goto out;
  3586. }
  3587. if (f2fs_is_mmap_file(inode) || get_dirty_pages(inode)) {
  3588. ret = -EBUSY;
  3589. goto out;
  3590. }
  3591. if (F2FS_HAS_BLOCKS(inode)) {
  3592. ret = -EFBIG;
  3593. goto out;
  3594. }
  3595. fi->i_compress_algorithm = option.algorithm;
  3596. fi->i_log_cluster_size = option.log_cluster_size;
  3597. fi->i_cluster_size = BIT(option.log_cluster_size);
  3598. /* Set default level */
  3599. if (fi->i_compress_algorithm == COMPRESS_ZSTD)
  3600. fi->i_compress_level = F2FS_ZSTD_DEFAULT_CLEVEL;
  3601. else
  3602. fi->i_compress_level = 0;
  3603. /* Adjust mount option level */
  3604. if (option.algorithm == F2FS_OPTION(sbi).compress_algorithm &&
  3605. F2FS_OPTION(sbi).compress_level)
  3606. fi->i_compress_level = F2FS_OPTION(sbi).compress_level;
  3607. f2fs_mark_inode_dirty_sync(inode, true);
  3608. if (!f2fs_is_compress_backend_ready(inode))
  3609. f2fs_warn(sbi, "compression algorithm is successfully set, "
  3610. "but current kernel doesn't support this algorithm.");
  3611. out:
  3612. f2fs_up_write(&fi->i_sem);
  3613. inode_unlock(inode);
  3614. mnt_drop_write_file(filp);
  3615. return ret;
  3616. }
  3617. static int redirty_blocks(struct inode *inode, pgoff_t page_idx, int len)
  3618. {
  3619. DEFINE_READAHEAD(ractl, NULL, NULL, inode->i_mapping, page_idx);
  3620. struct address_space *mapping = inode->i_mapping;
  3621. struct folio *folio;
  3622. pgoff_t redirty_idx = page_idx;
  3623. int page_len = 0, ret = 0;
  3624. filemap_invalidate_lock_shared(mapping);
  3625. page_cache_ra_unbounded(&ractl, len, 0);
  3626. filemap_invalidate_unlock_shared(mapping);
  3627. do {
  3628. folio = read_cache_folio(mapping, page_idx, NULL, NULL);
  3629. if (IS_ERR(folio)) {
  3630. ret = PTR_ERR(folio);
  3631. break;
  3632. }
  3633. page_len += folio_nr_pages(folio) - (page_idx - folio->index);
  3634. page_idx = folio_next_index(folio);
  3635. } while (page_len < len);
  3636. do {
  3637. folio = filemap_lock_folio(mapping, redirty_idx);
  3638. /* It will never fail, when folio has pinned above */
  3639. f2fs_bug_on(F2FS_I_SB(inode), IS_ERR(folio));
  3640. f2fs_folio_wait_writeback(folio, DATA, true, true);
  3641. folio_mark_dirty(folio);
  3642. folio_set_f2fs_gcing(folio);
  3643. redirty_idx = folio_next_index(folio);
  3644. folio_unlock(folio);
  3645. folio_put_refs(folio, 2);
  3646. } while (redirty_idx < page_idx);
  3647. return ret;
  3648. }
  3649. static int f2fs_ioc_decompress_file(struct file *filp)
  3650. {
  3651. struct inode *inode = file_inode(filp);
  3652. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3653. struct f2fs_inode_info *fi = F2FS_I(inode);
  3654. pgoff_t page_idx = 0, last_idx, cluster_idx;
  3655. int ret;
  3656. if (!f2fs_sb_has_compression(sbi) ||
  3657. F2FS_OPTION(sbi).compress_mode != COMPR_MODE_USER)
  3658. return -EOPNOTSUPP;
  3659. if (!(filp->f_mode & FMODE_WRITE))
  3660. return -EBADF;
  3661. f2fs_balance_fs(sbi, true);
  3662. ret = mnt_want_write_file(filp);
  3663. if (ret)
  3664. return ret;
  3665. inode_lock(inode);
  3666. if (!f2fs_is_compress_backend_ready(inode)) {
  3667. ret = -EOPNOTSUPP;
  3668. goto out;
  3669. }
  3670. if (!f2fs_compressed_file(inode) ||
  3671. is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
  3672. ret = -EINVAL;
  3673. goto out;
  3674. }
  3675. ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
  3676. if (ret)
  3677. goto out;
  3678. if (!atomic_read(&fi->i_compr_blocks))
  3679. goto out;
  3680. last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
  3681. last_idx >>= fi->i_log_cluster_size;
  3682. for (cluster_idx = 0; cluster_idx < last_idx; cluster_idx++) {
  3683. page_idx = cluster_idx << fi->i_log_cluster_size;
  3684. if (!f2fs_is_compressed_cluster(inode, page_idx))
  3685. continue;
  3686. ret = redirty_blocks(inode, page_idx, fi->i_cluster_size);
  3687. if (ret < 0)
  3688. break;
  3689. if (get_dirty_pages(inode) >= BLKS_PER_SEG(sbi)) {
  3690. ret = filemap_fdatawrite(inode->i_mapping);
  3691. if (ret < 0)
  3692. break;
  3693. }
  3694. cond_resched();
  3695. if (fatal_signal_pending(current)) {
  3696. ret = -EINTR;
  3697. break;
  3698. }
  3699. }
  3700. if (!ret)
  3701. ret = filemap_write_and_wait_range(inode->i_mapping, 0,
  3702. LLONG_MAX);
  3703. if (ret)
  3704. f2fs_warn(sbi, "%s: The file might be partially decompressed (errno=%d). Please delete the file.",
  3705. __func__, ret);
  3706. f2fs_update_time(sbi, REQ_TIME);
  3707. out:
  3708. inode_unlock(inode);
  3709. mnt_drop_write_file(filp);
  3710. return ret;
  3711. }
  3712. static int f2fs_ioc_compress_file(struct file *filp)
  3713. {
  3714. struct inode *inode = file_inode(filp);
  3715. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3716. struct f2fs_inode_info *fi = F2FS_I(inode);
  3717. pgoff_t page_idx = 0, last_idx, cluster_idx;
  3718. int ret;
  3719. if (!f2fs_sb_has_compression(sbi) ||
  3720. F2FS_OPTION(sbi).compress_mode != COMPR_MODE_USER)
  3721. return -EOPNOTSUPP;
  3722. if (!(filp->f_mode & FMODE_WRITE))
  3723. return -EBADF;
  3724. f2fs_balance_fs(sbi, true);
  3725. ret = mnt_want_write_file(filp);
  3726. if (ret)
  3727. return ret;
  3728. inode_lock(inode);
  3729. if (!f2fs_is_compress_backend_ready(inode)) {
  3730. ret = -EOPNOTSUPP;
  3731. goto out;
  3732. }
  3733. if (!f2fs_compressed_file(inode) ||
  3734. is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
  3735. ret = -EINVAL;
  3736. goto out;
  3737. }
  3738. ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
  3739. if (ret)
  3740. goto out;
  3741. set_inode_flag(inode, FI_ENABLE_COMPRESS);
  3742. last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
  3743. last_idx >>= fi->i_log_cluster_size;
  3744. for (cluster_idx = 0; cluster_idx < last_idx; cluster_idx++) {
  3745. page_idx = cluster_idx << fi->i_log_cluster_size;
  3746. if (f2fs_is_sparse_cluster(inode, page_idx))
  3747. continue;
  3748. ret = redirty_blocks(inode, page_idx, fi->i_cluster_size);
  3749. if (ret < 0)
  3750. break;
  3751. if (get_dirty_pages(inode) >= BLKS_PER_SEG(sbi)) {
  3752. ret = filemap_fdatawrite(inode->i_mapping);
  3753. if (ret < 0)
  3754. break;
  3755. }
  3756. cond_resched();
  3757. if (fatal_signal_pending(current)) {
  3758. ret = -EINTR;
  3759. break;
  3760. }
  3761. }
  3762. if (!ret)
  3763. ret = filemap_write_and_wait_range(inode->i_mapping, 0,
  3764. LLONG_MAX);
  3765. clear_inode_flag(inode, FI_ENABLE_COMPRESS);
  3766. if (ret)
  3767. f2fs_warn(sbi, "%s: The file might be partially compressed (errno=%d). Please delete the file.",
  3768. __func__, ret);
  3769. f2fs_update_time(sbi, REQ_TIME);
  3770. out:
  3771. inode_unlock(inode);
  3772. mnt_drop_write_file(filp);
  3773. return ret;
  3774. }
  3775. static long __f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
  3776. {
  3777. switch (cmd) {
  3778. case FS_IOC_GETVERSION:
  3779. return f2fs_ioc_getversion(filp, arg);
  3780. case F2FS_IOC_START_ATOMIC_WRITE:
  3781. return f2fs_ioc_start_atomic_write(filp, false);
  3782. case F2FS_IOC_START_ATOMIC_REPLACE:
  3783. return f2fs_ioc_start_atomic_write(filp, true);
  3784. case F2FS_IOC_COMMIT_ATOMIC_WRITE:
  3785. return f2fs_ioc_commit_atomic_write(filp);
  3786. case F2FS_IOC_ABORT_ATOMIC_WRITE:
  3787. return f2fs_ioc_abort_atomic_write(filp);
  3788. case F2FS_IOC_START_VOLATILE_WRITE:
  3789. case F2FS_IOC_RELEASE_VOLATILE_WRITE:
  3790. return -EOPNOTSUPP;
  3791. case F2FS_IOC_SHUTDOWN:
  3792. return f2fs_ioc_shutdown(filp, arg);
  3793. case FITRIM:
  3794. return f2fs_ioc_fitrim(filp, arg);
  3795. case FS_IOC_SET_ENCRYPTION_POLICY:
  3796. return f2fs_ioc_set_encryption_policy(filp, arg);
  3797. case FS_IOC_GET_ENCRYPTION_POLICY:
  3798. return f2fs_ioc_get_encryption_policy(filp, arg);
  3799. case FS_IOC_GET_ENCRYPTION_PWSALT:
  3800. return f2fs_ioc_get_encryption_pwsalt(filp, arg);
  3801. case FS_IOC_GET_ENCRYPTION_POLICY_EX:
  3802. return f2fs_ioc_get_encryption_policy_ex(filp, arg);
  3803. case FS_IOC_ADD_ENCRYPTION_KEY:
  3804. return f2fs_ioc_add_encryption_key(filp, arg);
  3805. case FS_IOC_REMOVE_ENCRYPTION_KEY:
  3806. return f2fs_ioc_remove_encryption_key(filp, arg);
  3807. case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
  3808. return f2fs_ioc_remove_encryption_key_all_users(filp, arg);
  3809. case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
  3810. return f2fs_ioc_get_encryption_key_status(filp, arg);
  3811. case FS_IOC_GET_ENCRYPTION_NONCE:
  3812. return f2fs_ioc_get_encryption_nonce(filp, arg);
  3813. case F2FS_IOC_GARBAGE_COLLECT:
  3814. return f2fs_ioc_gc(filp, arg);
  3815. case F2FS_IOC_GARBAGE_COLLECT_RANGE:
  3816. return f2fs_ioc_gc_range(filp, arg);
  3817. case F2FS_IOC_WRITE_CHECKPOINT:
  3818. return f2fs_ioc_write_checkpoint(filp);
  3819. case F2FS_IOC_DEFRAGMENT:
  3820. return f2fs_ioc_defragment(filp, arg);
  3821. case F2FS_IOC_MOVE_RANGE:
  3822. return f2fs_ioc_move_range(filp, arg);
  3823. case F2FS_IOC_FLUSH_DEVICE:
  3824. return f2fs_ioc_flush_device(filp, arg);
  3825. case F2FS_IOC_GET_FEATURES:
  3826. return f2fs_ioc_get_features(filp, arg);
  3827. case F2FS_IOC_GET_PIN_FILE:
  3828. return f2fs_ioc_get_pin_file(filp, arg);
  3829. case F2FS_IOC_SET_PIN_FILE:
  3830. return f2fs_ioc_set_pin_file(filp, arg);
  3831. case F2FS_IOC_PRECACHE_EXTENTS:
  3832. return f2fs_ioc_precache_extents(filp);
  3833. case F2FS_IOC_RESIZE_FS:
  3834. return f2fs_ioc_resize_fs(filp, arg);
  3835. case FS_IOC_ENABLE_VERITY:
  3836. return f2fs_ioc_enable_verity(filp, arg);
  3837. case FS_IOC_MEASURE_VERITY:
  3838. return f2fs_ioc_measure_verity(filp, arg);
  3839. case FS_IOC_READ_VERITY_METADATA:
  3840. return f2fs_ioc_read_verity_metadata(filp, arg);
  3841. case FS_IOC_GETFSLABEL:
  3842. return f2fs_ioc_getfslabel(filp, arg);
  3843. case FS_IOC_SETFSLABEL:
  3844. return f2fs_ioc_setfslabel(filp, arg);
  3845. case F2FS_IOC_GET_COMPRESS_BLOCKS:
  3846. return f2fs_ioc_get_compress_blocks(filp, arg);
  3847. case F2FS_IOC_RELEASE_COMPRESS_BLOCKS:
  3848. return f2fs_release_compress_blocks(filp, arg);
  3849. case F2FS_IOC_RESERVE_COMPRESS_BLOCKS:
  3850. return f2fs_reserve_compress_blocks(filp, arg);
  3851. case F2FS_IOC_SEC_TRIM_FILE:
  3852. return f2fs_sec_trim_file(filp, arg);
  3853. case F2FS_IOC_GET_COMPRESS_OPTION:
  3854. return f2fs_ioc_get_compress_option(filp, arg);
  3855. case F2FS_IOC_SET_COMPRESS_OPTION:
  3856. return f2fs_ioc_set_compress_option(filp, arg);
  3857. case F2FS_IOC_DECOMPRESS_FILE:
  3858. return f2fs_ioc_decompress_file(filp);
  3859. case F2FS_IOC_COMPRESS_FILE:
  3860. return f2fs_ioc_compress_file(filp);
  3861. case F2FS_IOC_GET_DEV_ALIAS_FILE:
  3862. return f2fs_ioc_get_dev_alias_file(filp, arg);
  3863. case F2FS_IOC_IO_PRIO:
  3864. return f2fs_ioc_io_prio(filp, arg);
  3865. default:
  3866. return -ENOTTY;
  3867. }
  3868. }
  3869. long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
  3870. {
  3871. if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp)))))
  3872. return -EIO;
  3873. if (!f2fs_is_checkpoint_ready(F2FS_I_SB(file_inode(filp))))
  3874. return -ENOSPC;
  3875. return __f2fs_ioctl(filp, cmd, arg);
  3876. }
  3877. /*
  3878. * Return %true if the given read or write request should use direct I/O, or
  3879. * %false if it should use buffered I/O.
  3880. */
  3881. static bool f2fs_should_use_dio(struct inode *inode, struct kiocb *iocb,
  3882. struct iov_iter *iter)
  3883. {
  3884. unsigned int align;
  3885. if (!(iocb->ki_flags & IOCB_DIRECT))
  3886. return false;
  3887. if (f2fs_force_buffered_io(inode, iov_iter_rw(iter)))
  3888. return false;
  3889. /*
  3890. * Direct I/O not aligned to the disk's logical_block_size will be
  3891. * attempted, but will fail with -EINVAL.
  3892. *
  3893. * f2fs additionally requires that direct I/O be aligned to the
  3894. * filesystem block size, which is often a stricter requirement.
  3895. * However, f2fs traditionally falls back to buffered I/O on requests
  3896. * that are logical_block_size-aligned but not fs-block aligned.
  3897. *
  3898. * The below logic implements this behavior.
  3899. */
  3900. align = iocb->ki_pos | iov_iter_alignment(iter);
  3901. if (!IS_ALIGNED(align, i_blocksize(inode)) &&
  3902. IS_ALIGNED(align, bdev_logical_block_size(inode->i_sb->s_bdev)))
  3903. return false;
  3904. return true;
  3905. }
  3906. static int f2fs_dio_read_end_io(struct kiocb *iocb, ssize_t size, int error,
  3907. unsigned int flags)
  3908. {
  3909. struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(iocb->ki_filp));
  3910. dec_page_count(sbi, F2FS_DIO_READ);
  3911. if (error)
  3912. return error;
  3913. f2fs_update_iostat(sbi, NULL, APP_DIRECT_READ_IO, size);
  3914. return 0;
  3915. }
  3916. static const struct iomap_dio_ops f2fs_iomap_dio_read_ops = {
  3917. .end_io = f2fs_dio_read_end_io,
  3918. };
  3919. static ssize_t f2fs_dio_read_iter(struct kiocb *iocb, struct iov_iter *to)
  3920. {
  3921. struct file *file = iocb->ki_filp;
  3922. struct inode *inode = file_inode(file);
  3923. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  3924. struct f2fs_inode_info *fi = F2FS_I(inode);
  3925. const loff_t pos = iocb->ki_pos;
  3926. const size_t count = iov_iter_count(to);
  3927. struct iomap_dio *dio;
  3928. ssize_t ret;
  3929. if (count == 0)
  3930. return 0; /* skip atime update */
  3931. trace_f2fs_direct_IO_enter(inode, iocb, count, READ);
  3932. if (iocb->ki_flags & IOCB_NOWAIT) {
  3933. if (!f2fs_down_read_trylock(&fi->i_gc_rwsem[READ])) {
  3934. ret = -EAGAIN;
  3935. goto out;
  3936. }
  3937. } else {
  3938. f2fs_down_read(&fi->i_gc_rwsem[READ]);
  3939. }
  3940. /* dio is not compatible w/ atomic file */
  3941. if (f2fs_is_atomic_file(inode)) {
  3942. f2fs_up_read(&fi->i_gc_rwsem[READ]);
  3943. ret = -EOPNOTSUPP;
  3944. goto out;
  3945. }
  3946. /*
  3947. * We have to use __iomap_dio_rw() and iomap_dio_complete() instead of
  3948. * the higher-level function iomap_dio_rw() in order to ensure that the
  3949. * F2FS_DIO_READ counter will be decremented correctly in all cases.
  3950. */
  3951. inc_page_count(sbi, F2FS_DIO_READ);
  3952. dio = __iomap_dio_rw(iocb, to, &f2fs_iomap_ops,
  3953. &f2fs_iomap_dio_read_ops, 0, NULL, 0);
  3954. if (IS_ERR_OR_NULL(dio)) {
  3955. ret = PTR_ERR_OR_ZERO(dio);
  3956. if (ret != -EIOCBQUEUED)
  3957. dec_page_count(sbi, F2FS_DIO_READ);
  3958. } else {
  3959. ret = iomap_dio_complete(dio);
  3960. }
  3961. f2fs_up_read(&fi->i_gc_rwsem[READ]);
  3962. file_accessed(file);
  3963. out:
  3964. trace_f2fs_direct_IO_exit(inode, pos, count, READ, ret);
  3965. return ret;
  3966. }
  3967. static void f2fs_trace_rw_file_path(struct file *file, loff_t pos, size_t count,
  3968. int rw)
  3969. {
  3970. struct inode *inode = file_inode(file);
  3971. char *buf, *path;
  3972. buf = f2fs_getname(F2FS_I_SB(inode));
  3973. if (!buf)
  3974. return;
  3975. path = dentry_path_raw(file_dentry(file), buf, PATH_MAX);
  3976. if (IS_ERR(path))
  3977. goto free_buf;
  3978. if (rw == WRITE)
  3979. trace_f2fs_datawrite_start(inode, pos, count,
  3980. current->pid, path, current->comm);
  3981. else
  3982. trace_f2fs_dataread_start(inode, pos, count,
  3983. current->pid, path, current->comm);
  3984. free_buf:
  3985. f2fs_putname(buf);
  3986. }
  3987. static ssize_t f2fs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
  3988. {
  3989. struct inode *inode = file_inode(iocb->ki_filp);
  3990. const loff_t pos = iocb->ki_pos;
  3991. ssize_t ret;
  3992. bool dio;
  3993. if (!f2fs_is_compress_backend_ready(inode))
  3994. return -EOPNOTSUPP;
  3995. if (trace_f2fs_dataread_start_enabled())
  3996. f2fs_trace_rw_file_path(iocb->ki_filp, iocb->ki_pos,
  3997. iov_iter_count(to), READ);
  3998. dio = f2fs_should_use_dio(inode, iocb, to);
  3999. /* In LFS mode, if there is inflight dio, wait for its completion */
  4000. if (f2fs_lfs_mode(F2FS_I_SB(inode)) &&
  4001. get_pages(F2FS_I_SB(inode), F2FS_DIO_WRITE) &&
  4002. (!f2fs_is_pinned_file(inode) || !dio))
  4003. inode_dio_wait(inode);
  4004. if (dio) {
  4005. ret = f2fs_dio_read_iter(iocb, to);
  4006. } else {
  4007. ret = filemap_read(iocb, to, 0);
  4008. if (ret > 0)
  4009. f2fs_update_iostat(F2FS_I_SB(inode), inode,
  4010. APP_BUFFERED_READ_IO, ret);
  4011. }
  4012. trace_f2fs_dataread_end(inode, pos, ret);
  4013. return ret;
  4014. }
  4015. static ssize_t f2fs_file_splice_read(struct file *in, loff_t *ppos,
  4016. struct pipe_inode_info *pipe,
  4017. size_t len, unsigned int flags)
  4018. {
  4019. struct inode *inode = file_inode(in);
  4020. const loff_t pos = *ppos;
  4021. ssize_t ret;
  4022. if (!f2fs_is_compress_backend_ready(inode))
  4023. return -EOPNOTSUPP;
  4024. if (trace_f2fs_dataread_start_enabled())
  4025. f2fs_trace_rw_file_path(in, pos, len, READ);
  4026. ret = filemap_splice_read(in, ppos, pipe, len, flags);
  4027. if (ret > 0)
  4028. f2fs_update_iostat(F2FS_I_SB(inode), inode,
  4029. APP_BUFFERED_READ_IO, ret);
  4030. trace_f2fs_dataread_end(inode, pos, ret);
  4031. return ret;
  4032. }
  4033. static ssize_t f2fs_write_checks(struct kiocb *iocb, struct iov_iter *from)
  4034. {
  4035. struct file *file = iocb->ki_filp;
  4036. struct inode *inode = file_inode(file);
  4037. ssize_t count;
  4038. int err;
  4039. if (IS_IMMUTABLE(inode))
  4040. return -EPERM;
  4041. if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED))
  4042. return -EPERM;
  4043. count = generic_write_checks(iocb, from);
  4044. if (count <= 0)
  4045. return count;
  4046. err = file_modified(file);
  4047. if (err)
  4048. return err;
  4049. f2fs_zero_post_eof_page(inode,
  4050. iocb->ki_pos + iov_iter_count(from), true);
  4051. return count;
  4052. }
  4053. /*
  4054. * Preallocate blocks for a write request, if it is possible and helpful to do
  4055. * so. Returns a positive number if blocks may have been preallocated, 0 if no
  4056. * blocks were preallocated, or a negative errno value if something went
  4057. * seriously wrong. Also sets FI_PREALLOCATED_ALL on the inode if *all* the
  4058. * requested blocks (not just some of them) have been allocated.
  4059. */
  4060. static int f2fs_preallocate_blocks(struct kiocb *iocb, struct iov_iter *iter,
  4061. bool dio)
  4062. {
  4063. struct inode *inode = file_inode(iocb->ki_filp);
  4064. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  4065. const loff_t pos = iocb->ki_pos;
  4066. const size_t count = iov_iter_count(iter);
  4067. struct f2fs_map_blocks map = {};
  4068. int flag;
  4069. int ret;
  4070. /* If it will be an out-of-place direct write, don't bother. */
  4071. if (dio && f2fs_lfs_mode(sbi))
  4072. return 0;
  4073. /*
  4074. * Don't preallocate holes aligned to DIO_SKIP_HOLES which turns into
  4075. * buffered IO, if DIO meets any holes.
  4076. */
  4077. if (dio && i_size_read(inode) &&
  4078. (F2FS_BYTES_TO_BLK(pos) < F2FS_BLK_ALIGN(i_size_read(inode))))
  4079. return 0;
  4080. /* No-wait I/O can't allocate blocks. */
  4081. if (iocb->ki_flags & IOCB_NOWAIT)
  4082. return 0;
  4083. /* If it will be a short write, don't bother. */
  4084. if (fault_in_iov_iter_readable(iter, count))
  4085. return 0;
  4086. if (f2fs_has_inline_data(inode)) {
  4087. /* If the data will fit inline, don't bother. */
  4088. if (pos + count <= MAX_INLINE_DATA(inode))
  4089. return 0;
  4090. ret = f2fs_convert_inline_inode(inode);
  4091. if (ret)
  4092. return ret;
  4093. }
  4094. /* Do not preallocate blocks that will be written partially in 4KB. */
  4095. map.m_lblk = F2FS_BLK_ALIGN(pos);
  4096. map.m_len = F2FS_BYTES_TO_BLK(pos + count);
  4097. if (map.m_len > map.m_lblk)
  4098. map.m_len -= map.m_lblk;
  4099. else
  4100. return 0;
  4101. if (!IS_DEVICE_ALIASING(inode))
  4102. map.m_may_create = true;
  4103. if (dio) {
  4104. map.m_seg_type = f2fs_rw_hint_to_seg_type(sbi,
  4105. inode->i_write_hint);
  4106. flag = F2FS_GET_BLOCK_PRE_DIO;
  4107. } else {
  4108. map.m_seg_type = NO_CHECK_TYPE;
  4109. flag = F2FS_GET_BLOCK_PRE_AIO;
  4110. }
  4111. ret = f2fs_map_blocks(inode, &map, flag);
  4112. /* -ENOSPC|-EDQUOT are fine to report the number of allocated blocks. */
  4113. if (ret < 0 && !((ret == -ENOSPC || ret == -EDQUOT) && map.m_len > 0))
  4114. return ret;
  4115. if (ret == 0)
  4116. set_inode_flag(inode, FI_PREALLOCATED_ALL);
  4117. return map.m_len;
  4118. }
  4119. static ssize_t f2fs_buffered_write_iter(struct kiocb *iocb,
  4120. struct iov_iter *from)
  4121. {
  4122. struct file *file = iocb->ki_filp;
  4123. struct inode *inode = file_inode(file);
  4124. ssize_t ret;
  4125. if (iocb->ki_flags & IOCB_NOWAIT)
  4126. return -EOPNOTSUPP;
  4127. ret = generic_perform_write(iocb, from);
  4128. if (ret > 0) {
  4129. f2fs_update_iostat(F2FS_I_SB(inode), inode,
  4130. APP_BUFFERED_IO, ret);
  4131. }
  4132. return ret;
  4133. }
  4134. static int f2fs_dio_write_end_io(struct kiocb *iocb, ssize_t size, int error,
  4135. unsigned int flags)
  4136. {
  4137. struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(iocb->ki_filp));
  4138. dec_page_count(sbi, F2FS_DIO_WRITE);
  4139. if (error)
  4140. return error;
  4141. f2fs_update_time(sbi, REQ_TIME);
  4142. f2fs_update_iostat(sbi, NULL, APP_DIRECT_IO, size);
  4143. return 0;
  4144. }
  4145. static void f2fs_dio_write_submit_io(const struct iomap_iter *iter,
  4146. struct bio *bio, loff_t file_offset)
  4147. {
  4148. struct inode *inode = iter->inode;
  4149. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  4150. enum log_type type = f2fs_rw_hint_to_seg_type(sbi, inode->i_write_hint);
  4151. enum temp_type temp = f2fs_get_segment_temp(sbi, type);
  4152. bio->bi_write_hint = f2fs_io_type_to_rw_hint(sbi, DATA, temp);
  4153. blk_crypto_submit_bio(bio);
  4154. }
  4155. static const struct iomap_dio_ops f2fs_iomap_dio_write_ops = {
  4156. .end_io = f2fs_dio_write_end_io,
  4157. .submit_io = f2fs_dio_write_submit_io,
  4158. };
  4159. static void f2fs_flush_buffered_write(struct address_space *mapping,
  4160. loff_t start_pos, loff_t end_pos)
  4161. {
  4162. int ret;
  4163. ret = filemap_write_and_wait_range(mapping, start_pos, end_pos);
  4164. if (ret < 0)
  4165. return;
  4166. invalidate_mapping_pages(mapping,
  4167. start_pos >> PAGE_SHIFT,
  4168. end_pos >> PAGE_SHIFT);
  4169. }
  4170. static ssize_t f2fs_dio_write_iter(struct kiocb *iocb, struct iov_iter *from,
  4171. bool *may_need_sync)
  4172. {
  4173. struct file *file = iocb->ki_filp;
  4174. struct inode *inode = file_inode(file);
  4175. struct f2fs_inode_info *fi = F2FS_I(inode);
  4176. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  4177. const bool do_opu = f2fs_lfs_mode(sbi);
  4178. const loff_t pos = iocb->ki_pos;
  4179. const ssize_t count = iov_iter_count(from);
  4180. unsigned int dio_flags;
  4181. struct iomap_dio *dio;
  4182. ssize_t ret;
  4183. trace_f2fs_direct_IO_enter(inode, iocb, count, WRITE);
  4184. if (iocb->ki_flags & IOCB_NOWAIT) {
  4185. /* f2fs_convert_inline_inode() and block allocation can block */
  4186. if (f2fs_has_inline_data(inode) ||
  4187. !f2fs_overwrite_io(inode, pos, count)) {
  4188. ret = -EAGAIN;
  4189. goto out;
  4190. }
  4191. if (!f2fs_down_read_trylock(&fi->i_gc_rwsem[WRITE])) {
  4192. ret = -EAGAIN;
  4193. goto out;
  4194. }
  4195. if (do_opu && !f2fs_down_read_trylock(&fi->i_gc_rwsem[READ])) {
  4196. f2fs_up_read(&fi->i_gc_rwsem[WRITE]);
  4197. ret = -EAGAIN;
  4198. goto out;
  4199. }
  4200. } else {
  4201. ret = f2fs_convert_inline_inode(inode);
  4202. if (ret)
  4203. goto out;
  4204. f2fs_down_read(&fi->i_gc_rwsem[WRITE]);
  4205. if (do_opu)
  4206. f2fs_down_read(&fi->i_gc_rwsem[READ]);
  4207. }
  4208. /*
  4209. * We have to use __iomap_dio_rw() and iomap_dio_complete() instead of
  4210. * the higher-level function iomap_dio_rw() in order to ensure that the
  4211. * F2FS_DIO_WRITE counter will be decremented correctly in all cases.
  4212. */
  4213. inc_page_count(sbi, F2FS_DIO_WRITE);
  4214. dio_flags = 0;
  4215. if (pos + count > inode->i_size)
  4216. dio_flags |= IOMAP_DIO_FORCE_WAIT;
  4217. dio = __iomap_dio_rw(iocb, from, &f2fs_iomap_ops,
  4218. &f2fs_iomap_dio_write_ops, dio_flags, NULL, 0);
  4219. if (IS_ERR_OR_NULL(dio)) {
  4220. ret = PTR_ERR_OR_ZERO(dio);
  4221. if (ret == -ENOTBLK)
  4222. ret = 0;
  4223. if (ret != -EIOCBQUEUED)
  4224. dec_page_count(sbi, F2FS_DIO_WRITE);
  4225. } else {
  4226. ret = iomap_dio_complete(dio);
  4227. }
  4228. if (do_opu)
  4229. f2fs_up_read(&fi->i_gc_rwsem[READ]);
  4230. f2fs_up_read(&fi->i_gc_rwsem[WRITE]);
  4231. if (ret < 0)
  4232. goto out;
  4233. if (pos + ret > inode->i_size)
  4234. f2fs_i_size_write(inode, pos + ret);
  4235. if (!do_opu)
  4236. set_inode_flag(inode, FI_UPDATE_WRITE);
  4237. if (iov_iter_count(from)) {
  4238. ssize_t ret2;
  4239. loff_t bufio_start_pos = iocb->ki_pos;
  4240. /*
  4241. * The direct write was partial, so we need to fall back to a
  4242. * buffered write for the remainder.
  4243. */
  4244. ret2 = f2fs_buffered_write_iter(iocb, from);
  4245. if (iov_iter_count(from))
  4246. f2fs_write_failed(inode, iocb->ki_pos);
  4247. if (ret2 < 0)
  4248. goto out;
  4249. /*
  4250. * Ensure that the pagecache pages are written to disk and
  4251. * invalidated to preserve the expected O_DIRECT semantics.
  4252. */
  4253. if (ret2 > 0) {
  4254. loff_t bufio_end_pos = bufio_start_pos + ret2 - 1;
  4255. ret += ret2;
  4256. f2fs_flush_buffered_write(file->f_mapping,
  4257. bufio_start_pos,
  4258. bufio_end_pos);
  4259. }
  4260. } else {
  4261. /* iomap_dio_rw() already handled the generic_write_sync(). */
  4262. *may_need_sync = false;
  4263. }
  4264. out:
  4265. trace_f2fs_direct_IO_exit(inode, pos, count, WRITE, ret);
  4266. return ret;
  4267. }
  4268. static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
  4269. {
  4270. struct inode *inode = file_inode(iocb->ki_filp);
  4271. const loff_t orig_pos = iocb->ki_pos;
  4272. const size_t orig_count = iov_iter_count(from);
  4273. loff_t target_size;
  4274. bool dio;
  4275. bool may_need_sync = true;
  4276. int preallocated;
  4277. const loff_t pos = iocb->ki_pos;
  4278. const ssize_t count = iov_iter_count(from);
  4279. ssize_t ret;
  4280. if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) {
  4281. ret = -EIO;
  4282. goto out;
  4283. }
  4284. if (!f2fs_is_compress_backend_ready(inode)) {
  4285. ret = -EOPNOTSUPP;
  4286. goto out;
  4287. }
  4288. if (iocb->ki_flags & IOCB_NOWAIT) {
  4289. if (!inode_trylock(inode)) {
  4290. ret = -EAGAIN;
  4291. goto out;
  4292. }
  4293. } else {
  4294. inode_lock(inode);
  4295. }
  4296. if (f2fs_is_pinned_file(inode) &&
  4297. !f2fs_overwrite_io(inode, pos, count)) {
  4298. ret = -EIO;
  4299. goto out_unlock;
  4300. }
  4301. ret = f2fs_write_checks(iocb, from);
  4302. if (ret <= 0)
  4303. goto out_unlock;
  4304. /* Determine whether we will do a direct write or a buffered write. */
  4305. dio = f2fs_should_use_dio(inode, iocb, from);
  4306. /* dio is not compatible w/ atomic write */
  4307. if (dio && f2fs_is_atomic_file(inode)) {
  4308. ret = -EOPNOTSUPP;
  4309. goto out_unlock;
  4310. }
  4311. /* Possibly preallocate the blocks for the write. */
  4312. target_size = iocb->ki_pos + iov_iter_count(from);
  4313. preallocated = f2fs_preallocate_blocks(iocb, from, dio);
  4314. if (preallocated < 0) {
  4315. ret = preallocated;
  4316. } else {
  4317. if (trace_f2fs_datawrite_start_enabled())
  4318. f2fs_trace_rw_file_path(iocb->ki_filp, iocb->ki_pos,
  4319. orig_count, WRITE);
  4320. /* Do the actual write. */
  4321. ret = dio ?
  4322. f2fs_dio_write_iter(iocb, from, &may_need_sync) :
  4323. f2fs_buffered_write_iter(iocb, from);
  4324. trace_f2fs_datawrite_end(inode, orig_pos, ret);
  4325. }
  4326. /* Don't leave any preallocated blocks around past i_size. */
  4327. if (preallocated && i_size_read(inode) < target_size) {
  4328. f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  4329. filemap_invalidate_lock(inode->i_mapping);
  4330. if (!f2fs_truncate(inode))
  4331. file_dont_truncate(inode);
  4332. filemap_invalidate_unlock(inode->i_mapping);
  4333. f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
  4334. } else {
  4335. file_dont_truncate(inode);
  4336. }
  4337. clear_inode_flag(inode, FI_PREALLOCATED_ALL);
  4338. out_unlock:
  4339. inode_unlock(inode);
  4340. out:
  4341. trace_f2fs_file_write_iter(inode, orig_pos, orig_count, ret);
  4342. if (ret > 0 && may_need_sync)
  4343. ret = generic_write_sync(iocb, ret);
  4344. /* If buffered IO was forced, flush and drop the data from
  4345. * the page cache to preserve O_DIRECT semantics
  4346. */
  4347. if (ret > 0 && !dio && (iocb->ki_flags & IOCB_DIRECT))
  4348. f2fs_flush_buffered_write(iocb->ki_filp->f_mapping,
  4349. orig_pos,
  4350. orig_pos + ret - 1);
  4351. return ret;
  4352. }
  4353. static int f2fs_file_fadvise(struct file *filp, loff_t offset, loff_t len,
  4354. int advice)
  4355. {
  4356. struct address_space *mapping;
  4357. struct backing_dev_info *bdi;
  4358. struct inode *inode = file_inode(filp);
  4359. int err;
  4360. trace_f2fs_fadvise(inode, offset, len, advice);
  4361. if (advice == POSIX_FADV_SEQUENTIAL) {
  4362. if (S_ISFIFO(inode->i_mode))
  4363. return -ESPIPE;
  4364. mapping = filp->f_mapping;
  4365. if (!mapping || len < 0)
  4366. return -EINVAL;
  4367. bdi = inode_to_bdi(mapping->host);
  4368. filp->f_ra.ra_pages = bdi->ra_pages *
  4369. F2FS_I_SB(inode)->seq_file_ra_mul;
  4370. spin_lock(&filp->f_lock);
  4371. filp->f_mode &= ~FMODE_RANDOM;
  4372. spin_unlock(&filp->f_lock);
  4373. return 0;
  4374. } else if (advice == POSIX_FADV_WILLNEED && offset == 0) {
  4375. /* Load extent cache at the first readahead. */
  4376. f2fs_precache_extents(inode);
  4377. }
  4378. err = generic_fadvise(filp, offset, len, advice);
  4379. if (err)
  4380. return err;
  4381. if (advice == POSIX_FADV_DONTNEED &&
  4382. (test_opt(F2FS_I_SB(inode), COMPRESS_CACHE) &&
  4383. f2fs_compressed_file(inode)))
  4384. f2fs_invalidate_compress_pages(F2FS_I_SB(inode), inode->i_ino);
  4385. else if (advice == POSIX_FADV_NOREUSE)
  4386. err = f2fs_keep_noreuse_range(inode, offset, len);
  4387. return err;
  4388. }
  4389. #ifdef CONFIG_COMPAT
  4390. struct compat_f2fs_gc_range {
  4391. u32 sync;
  4392. compat_u64 start;
  4393. compat_u64 len;
  4394. };
  4395. #define F2FS_IOC32_GARBAGE_COLLECT_RANGE _IOW(F2FS_IOCTL_MAGIC, 11,\
  4396. struct compat_f2fs_gc_range)
  4397. static int f2fs_compat_ioc_gc_range(struct file *file, unsigned long arg)
  4398. {
  4399. struct compat_f2fs_gc_range __user *urange;
  4400. struct f2fs_gc_range range;
  4401. int err;
  4402. urange = compat_ptr(arg);
  4403. err = get_user(range.sync, &urange->sync);
  4404. err |= get_user(range.start, &urange->start);
  4405. err |= get_user(range.len, &urange->len);
  4406. if (err)
  4407. return -EFAULT;
  4408. return __f2fs_ioc_gc_range(file, &range);
  4409. }
  4410. struct compat_f2fs_move_range {
  4411. u32 dst_fd;
  4412. compat_u64 pos_in;
  4413. compat_u64 pos_out;
  4414. compat_u64 len;
  4415. };
  4416. #define F2FS_IOC32_MOVE_RANGE _IOWR(F2FS_IOCTL_MAGIC, 9, \
  4417. struct compat_f2fs_move_range)
  4418. static int f2fs_compat_ioc_move_range(struct file *file, unsigned long arg)
  4419. {
  4420. struct compat_f2fs_move_range __user *urange;
  4421. struct f2fs_move_range range;
  4422. int err;
  4423. urange = compat_ptr(arg);
  4424. err = get_user(range.dst_fd, &urange->dst_fd);
  4425. err |= get_user(range.pos_in, &urange->pos_in);
  4426. err |= get_user(range.pos_out, &urange->pos_out);
  4427. err |= get_user(range.len, &urange->len);
  4428. if (err)
  4429. return -EFAULT;
  4430. return __f2fs_ioc_move_range(file, &range);
  4431. }
  4432. long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
  4433. {
  4434. if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(file)))))
  4435. return -EIO;
  4436. if (!f2fs_is_checkpoint_ready(F2FS_I_SB(file_inode(file))))
  4437. return -ENOSPC;
  4438. switch (cmd) {
  4439. case FS_IOC32_GETVERSION:
  4440. cmd = FS_IOC_GETVERSION;
  4441. break;
  4442. case F2FS_IOC32_GARBAGE_COLLECT_RANGE:
  4443. return f2fs_compat_ioc_gc_range(file, arg);
  4444. case F2FS_IOC32_MOVE_RANGE:
  4445. return f2fs_compat_ioc_move_range(file, arg);
  4446. case F2FS_IOC_START_ATOMIC_WRITE:
  4447. case F2FS_IOC_START_ATOMIC_REPLACE:
  4448. case F2FS_IOC_COMMIT_ATOMIC_WRITE:
  4449. case F2FS_IOC_START_VOLATILE_WRITE:
  4450. case F2FS_IOC_RELEASE_VOLATILE_WRITE:
  4451. case F2FS_IOC_ABORT_ATOMIC_WRITE:
  4452. case F2FS_IOC_SHUTDOWN:
  4453. case FITRIM:
  4454. case FS_IOC_SET_ENCRYPTION_POLICY:
  4455. case FS_IOC_GET_ENCRYPTION_PWSALT:
  4456. case FS_IOC_GET_ENCRYPTION_POLICY:
  4457. case FS_IOC_GET_ENCRYPTION_POLICY_EX:
  4458. case FS_IOC_ADD_ENCRYPTION_KEY:
  4459. case FS_IOC_REMOVE_ENCRYPTION_KEY:
  4460. case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
  4461. case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
  4462. case FS_IOC_GET_ENCRYPTION_NONCE:
  4463. case F2FS_IOC_GARBAGE_COLLECT:
  4464. case F2FS_IOC_WRITE_CHECKPOINT:
  4465. case F2FS_IOC_DEFRAGMENT:
  4466. case F2FS_IOC_FLUSH_DEVICE:
  4467. case F2FS_IOC_GET_FEATURES:
  4468. case F2FS_IOC_GET_PIN_FILE:
  4469. case F2FS_IOC_SET_PIN_FILE:
  4470. case F2FS_IOC_PRECACHE_EXTENTS:
  4471. case F2FS_IOC_RESIZE_FS:
  4472. case FS_IOC_ENABLE_VERITY:
  4473. case FS_IOC_MEASURE_VERITY:
  4474. case FS_IOC_READ_VERITY_METADATA:
  4475. case FS_IOC_GETFSLABEL:
  4476. case FS_IOC_SETFSLABEL:
  4477. case F2FS_IOC_GET_COMPRESS_BLOCKS:
  4478. case F2FS_IOC_RELEASE_COMPRESS_BLOCKS:
  4479. case F2FS_IOC_RESERVE_COMPRESS_BLOCKS:
  4480. case F2FS_IOC_SEC_TRIM_FILE:
  4481. case F2FS_IOC_GET_COMPRESS_OPTION:
  4482. case F2FS_IOC_SET_COMPRESS_OPTION:
  4483. case F2FS_IOC_DECOMPRESS_FILE:
  4484. case F2FS_IOC_COMPRESS_FILE:
  4485. case F2FS_IOC_GET_DEV_ALIAS_FILE:
  4486. case F2FS_IOC_IO_PRIO:
  4487. break;
  4488. default:
  4489. return -ENOIOCTLCMD;
  4490. }
  4491. return __f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
  4492. }
  4493. #endif
  4494. const struct file_operations f2fs_file_operations = {
  4495. .llseek = f2fs_llseek,
  4496. .read_iter = f2fs_file_read_iter,
  4497. .write_iter = f2fs_file_write_iter,
  4498. .iopoll = iocb_bio_iopoll,
  4499. .open = f2fs_file_open,
  4500. .release = f2fs_release_file,
  4501. .mmap_prepare = f2fs_file_mmap_prepare,
  4502. .flush = f2fs_file_flush,
  4503. .fsync = f2fs_sync_file,
  4504. .fallocate = f2fs_fallocate,
  4505. .unlocked_ioctl = f2fs_ioctl,
  4506. #ifdef CONFIG_COMPAT
  4507. .compat_ioctl = f2fs_compat_ioctl,
  4508. #endif
  4509. .splice_read = f2fs_file_splice_read,
  4510. .splice_write = iter_file_splice_write,
  4511. .fadvise = f2fs_file_fadvise,
  4512. .fop_flags = FOP_BUFFER_RASYNC,
  4513. .setlease = generic_setlease,
  4514. };