Linux 5.7 kernel release

Pagkatapos ng dalawang buwan ng pag-unlad, si Linus Torvalds ipinakilala pagpapalabas ng kernel Linux 5.7. Kabilang sa mga pinaka-kapansin-pansing pagbabago: isang bagong pagpapatupad ng exFAT file system, isang bareudp module para sa paglikha ng UDP tunnels, proteksyon batay sa pointer authentication para sa ARM64, ang kakayahang mag-attach ng mga BPF program sa LSM handlers, isang bagong pagpapatupad ng Curve25519, isang split- lock detector, BPF compatibility sa PREEMPT_RT, inaalis ang limitasyon sa 80-character line na laki sa code, isinasaalang-alang ang mga indicator ng temperatura ng CPU sa task scheduler, ang kakayahang gumamit ng clone() para mag-spawn ng mga proseso sa ibang cgroup, proteksyon laban sa pagsusulat sa memorya gamit ang userfaultfd.

Kasama sa bagong bersyon ang 15033 pag-aayos mula sa 1961 developer,
laki ng patch - 39 MB (naapektuhan ng mga pagbabago ang 11590 file, nagdagdag ng 570560 na linya ng code,
297401 row ang inalis). Humigit-kumulang 41% ng lahat ng ipinakita sa 5.7
Ang mga pagbabago ay nauugnay sa mga driver ng device, humigit-kumulang 16% ng mga pagbabago ay
saloobin sa pag-update ng code na partikular sa mga arkitektura ng hardware, 13%
nauugnay sa network stack, 4% sa mga file system at 4% sa panloob
mga subsystem ng kernel.

Ang pangunahing mga inobasyon:

  • Disk subsystem, I/O at mga file system
    • Nagdagdag ng bagong pagpapatupad ng exFAT driver, itinatag batay sa kasalukuyang "sdfat" (2.x) code base na binuo ng Samsung para sa mga Android smartphone nito. Ang driver na dating idinagdag sa kernel ay batay sa legacy na Samsung code (bersyon 1.2.9) at humigit-kumulang 10% sa likod ng bagong driver sa pagganap. Alalahanin natin na ang pagdaragdag ng suporta ng exFAT sa kernel ay naging posible pagkatapos ng Microsoft ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° pampublikong mga detalye at ginawang available ang mga exFAT patent para sa walang royalty na paggamit sa Linux.
    • Ang Btrfs ay nagpapatupad ng bagong ioctl() command - BTRFS_IOC_SNAP_DESTROY_V2, na nagbibigay-daan sa iyong tanggalin ang isang subsection sa pamamagitan ng identifier nito. Ang buong suporta para sa pag-clone ng mga inline na lawak ay ibinigay. Ang bilang ng mga punto ng pagkansela para sa mga pagpapatakbo ng muling pamimigay ay pinalawak, na nagpabawas ng mahabang paghihintay kapag ipinatupad ang utos na 'balance cancel'. Ang pagpapasiya ng mga backlink sa mga lawak ay pinabilis (halimbawa, ang oras ng pagpapatupad ng script ng pagsubok ay nabawasan mula sa isang oras hanggang ilang minuto). Nagdagdag ng kakayahang mag-attach ng mga lawak ng file sa bawat inode ng isang puno. Ang pamamaraan ng pagharang na ginamit kapag sumusulat sa mga subpartition at kapag hindi kasama ang NOCOW ay muling idinisenyo. Pinahusay na kahusayan ng fsync execution para sa mga range.
    • Pinahusay ng XFS ang pagsusuri ng metadata at fsck para sa mga aktibong partisyon. Ang isang library ay iminungkahi para sa muling pagtatayo ng mga istruktura ng btree, na sa hinaharap ay gagamitin upang muling ayusin ang xfs_repair at ipatupad ang posibilidad ng pagbawi nang hindi inaalis ang pagkakabit.
    • Ang pang-eksperimentong suporta para sa paglalagay ng swap partition sa mga storage ng SMB3 ay idinagdag sa CIFS. Ipinatupad ang mga extension ng POSIX sa readdir, na tinukoy sa detalye ng SMB3.1.1. Pinahusay na pagganap ng pagsulat para sa 64KB na mga pahina kapag ang cache=strict mode ay pinagana at ang mga bersyon ng protocol na 2.1+ ay ginagamit.
    • Ang FS EXT4 ay inilipat mula sa bmap at iopoll sa paggamit ng iomap.
    • Nagbibigay ang F2FS ng opsyonal na suporta para sa compression ng data gamit ang zstd algorithm. Bilang default, ang LZ4 algorithm ay ginagamit para sa compression. Nagdagdag ng suporta para sa "chattr -c commit" na utos. Ang display ng oras ng pag-mount ay ibinigay. Idinagdag ang ioctl F2FS_IOC_GET_COMPRESS_BLOCKS upang makakuha ng impormasyon tungkol sa bilang ng mga naka-compress na bloke. Nagdagdag ng compression data output sa pamamagitan ng statx.
    • Ang Ceph file system ay nagdagdag ng kakayahang lokal na magsagawa ng paggawa ng file at pagtanggal ng mga operasyon (i-unlink) nang hindi naghihintay ng tugon mula sa server (gumagana sa asynchronous mode). Ang pagbabago, halimbawa, ay maaaring makabuluhang mapabuti ang pagganap kapag nagpapatakbo ng rsync utility.
    • Ang kakayahang gumamit ng mga virtiof bilang isang top-level na file system ay naidagdag sa OVERLAYFS.
    • Muling isinulat path traversal code sa VFS, ang symbolic link parsing code ay muling ginawa, at ang mount point traversal ay pinag-isa.
    • Sa scsi subsystem sa mga unprivileged user pinapayagan pagpapatupad ng mga utos ng ZBC.
    • Sa dm_writecache ipinatupad ang kakayahang unti-unting i-clear ang cache batay sa max_age na parameter, na nagtatakda ng maximum na buhay ng isang block.
    • Sa dm_integrity idinagdag suporta para sa "discard" na operasyon.
    • Sa null_blk idinagdag suporta para sa pagpapalit ng error upang gayahin ang mga pagkabigo sa panahon ng pagsubok.
    • Idinagdag kakayahang magpadala ng mga abiso sa udev tungkol sa mga pagbabago sa laki ng device sa pag-block.
  • Subsystem ng network
    • Kasama ang Netfilter pagbabago, makabuluhang pinabilis ang pagproseso ng malalaking listahan ng tugma (nftables set), na nangangailangan ng pagsuri ng kumbinasyon ng mga subnet, network port, protocol at MAC address.
      Mga pag-optimize ginawa sa module ng nft_set_pipapo (PIle PAcket POlicies), na nilulutas ang problema ng pagtutugma ng mga nilalaman ng isang packet na may mga arbitrary na saklaw ng estado ng field na ginagamit sa mga panuntunan sa pag-filter, tulad ng mga saklaw ng IP at network port (nft_set_rbtree at nft_set_hash manipulate ang pagtutugma ng pagitan at direktang pagmuni-muni ng mga halaga ). Ang bersyon ng pipapo vectorized gamit ang 256-bit AVX2 na mga tagubilin sa isang system na may AMD Epyc 7402 processor ay nagpakita ng 420% na pagtaas ng pagganap kapag nag-parse ng 30 libong mga tala kasama ang mga kumbinasyon ng port-protocol. Ang pagtaas kapag naghahambing ng kumbinasyon ng isang subnet at isang port number kapag nag-parse ng 1000 na tala ay 87% para sa IPv4 at 128% para sa IPv6.

    • Idinagdag bareudp module, na nagpapahintulot sa iyo na i-encapsulate ang iba't ibang L3 protocol, tulad ng MPLS, IP at NSH, sa isang UDP tunnel.
    • Ang pagsasama-sama ng mga bahagi ng MPTCP (MultiPath TCP), isang extension ng TCP protocol para sa pag-aayos ng operasyon ng isang koneksyon sa TCP sa paghahatid ng mga packet nang sabay-sabay sa ilang mga ruta sa pamamagitan ng iba't ibang mga interface ng network na nakatali sa iba't ibang mga IP address, ay nagpatuloy.
    • Idinagdag suporta para sa mga mekanismo ng pagpapabilis ng hardware para sa pag-encapsulate ng mga Ethernet frame sa 802.11 (Wi-Fi).
    • Kapag naglilipat ng device mula sa isang namespace ng network patungo sa isa pa, inaayos ang mga karapatan sa pag-access at pagmamay-ari ng mga kaukulang file sa sysfs.
    • Idinagdag ang kakayahang gamitin ang flag ng SO_BINDTODEVICE para sa mga hindi root na user.
    • Ang ikatlong bahagi ng mga patch ay tinanggap, na kino-convert ang ethtool toolkit mula sa ioctl() sa paggamit ng netlink interface. Pinapadali ng bagong interface ang magdagdag ng mga extension, pinapahusay ang paghawak ng error, pinapayagan ang mga notification na maipadala kapag nagbago ang estado, pinapasimple ang pakikipag-ugnayan sa pagitan ng kernel at espasyo ng user, at binabawasan ang bilang ng mga pinangalanang listahan na kailangang i-synchronize.
    • Idinagdag ang kakayahang gumamit ng mga espesyal na hardware accelerators upang magsagawa ng mga operasyon sa pagsubaybay sa koneksyon.
    • Sa netfilter dagdag pa isang hook para sa pagkonekta ng mga classifier ng papalabas na packet (egress), na umakma sa dating kasalukuyang hook para sa mga papasok na packet (ingress).
  • Virtualization at Seguridad
    • Nagdagdag ng pagpapatupad ng hardware ng pointer authentication (Pointer Authentication), na gumagamit ng mga espesyal na tagubilin ng ARM64 CPU upang maprotektahan laban sa mga pag-atake gamit ang mga diskarte sa return-oriented programming (ROP), kung saan hindi sinusubukan ng attacker na ilagay ang kanyang code sa memorya, ngunit gumagana sa mga piraso ng mga tagubilin ng makina na magagamit na sa mga naka-load na library, na nagtatapos na may control return instruction. Ang seguridad ay bumababa sa paggamit ng mga digital na lagda upang i-verify ang mga return address sa antas ng kernel. Ang lagda ay naka-imbak sa hindi nagamit na tuktok na mga piraso ng pointer mismo. Hindi tulad ng mga pagpapatupad ng software, ang paglikha at pag-verify ng mga digital na lagda ay isinasagawa gamit ang mga espesyal na tagubilin ng CPU.
    • Idinagdag ang kakayahang protektahan ang isang memory area mula sa pagsusulat gamit ang userfaultfd() system call, na idinisenyo upang pangasiwaan ang mga page faults (access sa mga hindi inilalaang memory page) sa espasyo ng user. Ang ideya ay gamitin ang userfaultfd() kapwa upang makita ang mga paglabag sa pag-access sa mga pahinang minarkahan bilang protektado ng sulat at tumawag sa isang handler na maaaring tumugon sa mga naturang pagtatangka sa pagsulat (halimbawa, upang mahawakan ang mga pagbabago sa panahon ng paglikha ng mga live na snapshot ng mga tumatakbong proseso, estado makunan kapag nagtatapon ng memory dumps sa disk, pagpapatupad ng shared memory, pagsubaybay sa mga pagbabago sa memorya). Pag-andar katumbas gamit ang mprotect() kasabay ng tagapangasiwa ng signal ng SIGSEGV, ngunit mas mabilis itong gumagana.
    • Inalis na ng SELinux ang parameter na "checkreqprot", na nagbibigay-daan sa iyong i-disable ang mga tseke sa proteksyon ng memory kapag nagpoproseso ng mga panuntunan (pinapayagan ang paggamit ng mga executable memory area, anuman ang mga panuntunang tinukoy sa mga panuntunan). Ang mga symlink ng Kernfs ay pinapayagang magmana ng konteksto ng kanilang mga pangunahing direktoryo.
    • Ang istraktura nakabukas module KRSI, na nagpapahintulot sa iyo na mag-attach ng mga BPF program sa anumang LSM hook sa kernel. Ang pagbabago ay nagpapahintulot sa iyo na lumikha ng mga LSM module (Linux Security Module) sa anyo ng mga BPF program upang malutas ang mga problema sa pag-audit at mandatoryong kontrol sa pag-access.
    • Isinagawa Ino-optimize ang pagganap ng /dev/random sa pamamagitan ng pag-batch ng mga halaga ng CRNG sa halip na tawagan ang mga tagubilin ng RNG nang paisa-isa. Pinahusay na performance ng getrandom at /dev/random sa mga ARM64 system na nagbibigay ng mga tagubilin sa RNG.
    • Pagpapatupad ng isang elliptic curve Curve25519 pinalitan para sa opsyon mula sa library HACL, para sa binigay mathematical na patunay ng pormal na pagpapatunay ng pagiging maaasahan.
    • Idinagdag mekanismo para sa pagpapaalam tungkol sa mga libreng pahina ng memorya. Gamit ang mekanismong ito, maaaring magpadala ang mga guest system ng impormasyon tungkol sa mga page na hindi na ginagamit sa host system, at maaaring bawiin ng host ang data ng page.
    • Sa vfio/pci idinagdag suporta para sa SR-IOV (Single-Root I/O Virtualization).
  • Mga serbisyo ng memorya at system
    • Mula 80 hanggang 100 character nadagdagan limitasyon sa maximum na haba ng linya sa mga pinagmulang teksto. Kasabay nito, inirerekomenda pa rin ang mga developer na manatili sa loob ng 80 character bawat linya, ngunit hindi na ito mahirap na limitasyon. Bilang karagdagan, ang paglampas sa limitasyon sa laki ng linya ay magreresulta na ngayon sa babala sa pagbuo lamang kung ang checkpatch ay pinapatakbo gamit ang '--strict' na opsyon. Ang pagbabago ay gagawing posible na hindi makagambala sa mga developer sa pamamagitan ng pagpapatakbo na may mga puwang at pakiramdam na mas malaya kapag inihanay ang code, pati na rin ay mapipigilan labis na pagkaputol ng linya, nakakabahala pag-unawa sa code at paghahanap.
    • Idinagdag suporta para sa EFI mixed boot mode, na nagbibigay-daan sa iyong mag-load ng 64-bit kernel mula sa 32-bit firmware na tumatakbo sa isang 64-bit na CPU nang hindi gumagamit ng espesyal na bootloader.
    • Kasama sistema para sa pagtukoy at pag-debug ng mga split lock (β€œhating lock"), na nangyayari kapag ina-access ang hindi nakahanay na data sa memorya dahil sa katotohanan na kapag nagsasagawa ng atomic na pagtuturo, ang data ay tumatawid sa dalawang linya ng cache ng CPU. Ang ganitong pagharang ay nagreresulta sa isang makabuluhang hit sa pagganap (1000 cycle na mas mabagal kaysa sa isang atomic na operasyon sa data na nahuhulog sa isang linya ng cache). Depende sa "split_lock_detect" na parameter ng boot, ang kernel ay makaka-detect ng ganoong mga lock sa mabilisang paraan at mag-isyu ng mga babala o magpadala ng SIGBUS signal sa application na nagdudulot ng lock.
    • Ang task scheduler ay nagbibigay ng pagsubaybay sa mga sensor ng temperatura (Thermal Pressure) at ipinatupad na isinasaalang-alang ang sobrang pag-init kapag naglalagay ng mga gawain. Gamit ang ibinigay na mga istatistika, maaaring ayusin ng thermal governor ang maximum na dalas ng CPU kapag nag-overheat, at isinasaalang-alang na ngayon ng task scheduler ang pagbawas sa kapangyarihan ng pag-compute dahil sa pagbabawas ng frequency kapag nag-iiskedyul ng mga gawain na tumakbo (dati, ang scheduler ay tumugon sa mga pagbabago sa dalas ng isang tiyak na pagkaantala, para sa ilang oras na paggawa ng mga desisyon batay sa napalaki na mga pagpapalagay tungkol sa mga magagamit na mapagkukunan ng computing).
    • Kasama sa task scheduler mga invariant indicator pagsubaybay sa pagkarga, na nagbibigay-daan sa iyong tama na tantiyahin ang pagkarga, anuman ang kasalukuyang dalas ng pagpapatakbo ng CPU. Ang pagbabago ay nagpapahintulot sa iyo na mas tumpak na mahulaan ang pag-uugali ng mga gawain sa ilalim ng mga kondisyon ng mga dynamic na pagbabago sa boltahe at dalas ng CPU. Halimbawa, ang isang gawain na kumonsumo ng 1/3 ng mga mapagkukunan ng CPU sa 1000 MHz ay ​​kumonsumo ng 2/3 ng mga mapagkukunan kapag ang dalas ay bumaba sa 500 MHz, na dati ay lumikha ng isang maling palagay na ito ay tumatakbo sa buong kapasidad (ibig sabihin, lumitaw ang mga gawain. mas malaki sa scheduler lamang sa pamamagitan ng pagbabawas ng dalas, na humantong sa mga maling desisyon na ginawa sa schedutil cpufreq governor).
    • Ang driver ng Intel P-state, na responsable sa pagpili ng mga mode ng pagganap, ay inilipat upang gamitin iskedyul.
    • Ang kakayahang gamitin ang BPF subsystem kapag ang kernel ay tumatakbo sa real time (PREEMPT_RT) ay ipinatupad. Dati, kapag ang PREEMPT_RT ay pinagana, ang BPF ay kinakailangang i-disable.
    • Isang bagong uri ng BPF program ang naidagdag - BPF_MODIFY_RETURN, na maaaring i-attach sa isang function sa kernel at baguhin ang value na ibinalik ng function na ito.
    • Idinagdag pagkakataon Gamit ang clone3() system call para gumawa ng proseso sa isang cgroup na iba sa parent cgroup, na nagbibigay-daan sa proseso ng magulang na maglapat ng mga paghihigpit at paganahin kaagad ang accounting pagkatapos mag-spawning ng bagong proseso o thread. Halimbawa, ang isang tagapamahala ng serbisyo ay maaaring direktang maglaan ng mga bagong serbisyo sa magkakahiwalay na cgroup, at ang mga bagong proseso, kapag inilagay sa mga "frozen" na cgroup, ay agad na ititigil.
    • sa Kbuild idinagdag suporta para sa environment variable na "LLVM=1" upang lumipat sa Clang/LLVM toolkit kapag binubuo ang kernel. Ang mga kinakailangan para sa bersyon ng binutils ay itinaas (2.23).
    • Ang isang seksyon /sys/kernel/debug/kunit/ ay idinagdag sa mga debugf na may mga resulta ng mga pagsusuri sa kunit.
    • Nagdagdag ng parameter ng kernel boot na pm_debug_messages (katulad ng /sys/power/pm_debug_messages), na nagbibigay-daan sa output ng impormasyon sa pag-debug tungkol sa pagpapatakbo ng power management system (kapaki-pakinabang kapag nagde-debug ng mga problema sa hibernation at standby mode).
    • Sa asynchronous na interface ng I/O io_uring idinagdag ang suporta splice() ΠΈ pagpili ng atomic buffer.
    • Pinahusay na cgroup profiling gamit ang perf toolkit. Dati, ang perf ay maaari lamang mag-profile ng mga gawain sa isang partikular na cgroup at hindi malaman kung saang cgroup kabilang ang kasalukuyang sample. Tumatanggap na ngayon ang perf ng impormasyon ng cgroup para sa bawat sample, na nagbibigay-daan sa iyong mag-profile ng higit sa isang cgroup at mag-apply ng pag-uuri ayon sa
      cgroup sa mga ulat.

    • Ang cgroupfs, isang pseudo-FS para sa pamamahala ng mga cgroup, ay nagdagdag ng suporta para sa mga pinahabang katangian (xattrs), kung saan, halimbawa, maaari kang mag-iwan ng karagdagang impormasyon para sa mga humahawak sa espasyo ng gumagamit.
    • Sa cgroup memory controller dagdag paat suporta para sa recursive na proteksyon ng "memory.low" na halaga, na kinokontrol ang minimum na halaga ng RAM na ibinibigay sa mga miyembro ng grupo. Kapag nag-mount ng cgroup hierarchy na may opsyong "memory_recursiveprot", ang halaga ng "memory.low" na nakatakda para sa mga lower node ay awtomatikong ipapamahagi sa lahat ng child node.
    • Idinagdag Framework ng Uacce (Unified/User-space-access-intended Accelerator Framework) para sa pagbabahagi ng mga virtual address (SVA, Shared Virtual Addressing) sa pagitan ng CPU at mga peripheral na device, na nagpapahintulot sa mga hardware accelerator na ma-access ang mga istruktura ng data sa pangunahing CPU.
  • Mga arkitektura ng hardware
    • Para sa arkitektura ng ARM, ipinatupad ang kakayahang mag-hot-fetch ng memorya.
    • Para sa arkitektura ng RISC-V, idinagdag ang suporta para sa hot plugging at pagtanggal ng mga CPU (CPU hotplug). Para sa 32-bit na RISC-V, ipinapatupad ang eBPF JIT.
    • Ang kakayahang gumamit ng mga 32-bit na ARM system para magpatakbo ng mga KVM guest environment ay inalis na.
    • Inalis ang "dummy" na pagpapatupad ng NUMA para sa arkitektura ng s390, kung saan walang nakitang mga kaso ng paggamit upang makamit ang mga pagpapahusay sa pagganap.
    • Para sa ARM64, nagdagdag ng suporta para sa extension ng AMU (Activity Monitors Unit), na tinukoy sa ARMv8.4 at nagbibigay ng mga performance counter na ginagamit upang kalkulahin ang mga salik sa pagwawasto ng frequency scaling sa task scheduler.
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Idinagdag suporta para sa mga vDPA device na gumagamit ng data exchange channel na sumusunod sa mga detalye ng virtio. Ang mga vDPA device ay maaaring alinman sa pisikal na konektadong kagamitan o software na tinularan ng mga virtual na device.
    • Sa subsystem ng GPIO lumitaw isang bagong ioctl() command para sa pagsubaybay sa mga pagbabago, na nagbibigay-daan sa iyong ipaalam ang proseso tungkol sa mga pagbabago sa estado ng anumang linya ng GPIO. Bilang halimbawa ng paggamit ng bagong command iminungkahi gpio-watch utility.
    • Sa i915 DRM driver para sa Intel video card kasama default na suporta para sa Tigerlake (β€œGen12”) chips at nagdagdag ng paunang suporta para sa OLED backlight control. Pinahusay na suporta para sa Ice Lake, Elkhart Lake, Baytrail at Haswell chips.
    • Sa amdgpu driver idinagdag kakayahang mag-load ng firmware sa USBC chip para sa ASIC. Pinahusay na suporta para sa AMD Ryzen 4000 "Renoir" chips. Mayroon na ngayong suporta para sa pagkontrol sa mga OLED panel. Ibinigay ang pagpapakita ng katayuan ng firmware sa mga debug.
    • Ang kakayahang gamitin ang OpenGL 4 sa mga guest system ay naidagdag sa vmwgfx DRM driver para sa VMware virtualization system (dating OpenGL 3.3 ay suportado).
    • Nagdagdag ng bagong DRM driver tidss para sa TI Keystone platform display system.
    • Mga idinagdag na driver para sa mga LCD panel: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D350RD, Rocktech RK54004IIXNUMXD-XNUMXCTXNUMX.
    • Sa sistema ng pamamahala ng kuryente idinagdag suporta para sa platform ng Intel Jasper Lake (JSL) na nakabase sa Atom.
    • Nagdagdag ng suporta para sa Pinebook Pro laptop batay sa Rockchip RK3399, Pine64 PineTab tablet at smartphone PinePhone batay sa Allwinner A64.
    • Nagdagdag ng suporta para sa mga bagong audio codec at chip:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Nagdagdag ng suporta para sa mga ARM board at platform na Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron β€œsl28”, 11 i.MX6 TechNexion Pico board na mga opsyon, tatlong bagong opsyon sa Toradex Colibri, Samsung S7710 Galaxy Xcover 2 batay sa ST -Ericsson u8500, DH Electronics DHCOM SoM at PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Pinagmulan: opennet.ru

Magdagdag ng komento