X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=fs%2Fnamei.c;h=94565bd7e73f6f41c176513ff15a68961fa351d8;hb=fd83ff901d69f6ecc2381c3dda412cca14b984bb;hp=567ee547492bc24096cad45c9c64aef84491fe42;hpb=474197a4f7921a97aa1aabc6f759823a024ff25f;p=platform%2Fkernel%2Flinux-starfive.git diff --git a/fs/namei.c b/fs/namei.c index 567ee547..94565bd 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -188,7 +188,7 @@ getname_flags(const char __user *filename, int flags, int *empty) } } - result->refcnt = 1; + atomic_set(&result->refcnt, 1); /* The empty path is special. */ if (unlikely(!len)) { if (empty) @@ -249,7 +249,7 @@ getname_kernel(const char * filename) memcpy((char *)result->name, filename, len); result->uptr = NULL; result->aname = NULL; - result->refcnt = 1; + atomic_set(&result->refcnt, 1); audit_getname(result); return result; @@ -261,9 +261,10 @@ void putname(struct filename *name) if (IS_ERR(name)) return; - BUG_ON(name->refcnt <= 0); + if (WARN_ON_ONCE(!atomic_read(&name->refcnt))) + return; - if (--name->refcnt > 0) + if (!atomic_dec_and_test(&name->refcnt)) return; if (name->name != name->iname) {